Makefile
- Compile 방법을 기술하는 파일
- 다수의 파일을 한번에 컴파일 가능
Make
- 주어진 Makefile에 따라 compile을 수행하고 실행파일을 생성
- 최초 컴파일 이후에는, 변경이 있는 파일만 컴파일 함
Rule Block
<Target>:<Dependencies>
<Recipe>
- Target : Build 대상 이름, 일반적으로 최종 결과 파일명 사용
- Dependency : Build 대상이 의존하는 Target이나 파일 목록
- Recipe : Build 대상을 생성하는 명령어
app.out: main.o foo.o bar.o
gcc -o app.out main.o foo.o bar.o
main.o: foo.h bar.h main.c
gcc -c -o main.o main.c
foo.o: foo.h foo.c
gcc -c -o foo.o foo.c
bar.o: bar.h bar.c
gcc -c -o bar.o bar.c
$ make
- Implicit rules : 자주 사용되는 규칙을 자동 처리 해줌
app.out: main.o foo.o bar.o
gcc -o app.out main.o foo.o bar.o
main.o: foo.h bar.h main.c
foo.o: foo.h foo.c
bar.o: bar.h bar.c
- Variables(or Macro)
CC=gcc
CFLAGS=-g -Wall
OBJS=main.o foo.o bar.o
TARGET=app.out
$(TARGET):$(OBJS)
$(CC) -o $@ $^ # $@: current target name $^: current dependencies
main.o:foo.h bar.h main.c
foo.o:foo.h foo.c
bar.o:bar.h bar.c
- Clean rule : Build로 생성된 파일들 삭제하는 규칙
clean:
rm -f *.o
rm -f $(TARGET)
$ make clean
CMake
- Makefile을 기술하는 파일
- Makefile을 자동으로 생성
- 소스 코드 내부까지 분석해 의존성 정보를 스스로 파악
- object 파일과 의존성 정보를 일일이 작성하지 않아도 됨
- cmake 명령어는 최초 한 번만 실행하고, 이후로는 Makefile을 실행할 때 필요에 따라 자동 재생성
기본 사용법
# CMakeLists.txt
ADD_EXECUTABLE(app.out main.c foo.c bar.c)
cmake CMakeLists.txt # Makefile 생성
make
주요 명령과 변수
- 빌드 형상
- Debug
- Release
- RelWithDebInfo : 배포 목적의 빌드지만, 디버깅 정보 포함
- MinSizeRel : 최소 크기로 최적화한 배포 목적 빌드
- 변수 정의
SET(SRC_FILES main.c foo.c bar.c)
ADD_EXECUTABLE(app.out ${SRC_FILES})
- 프로젝트 이름 설정
PROJECT(TEST) # 이름 설정
MESSAGE(${CMAKE_PROJECT_NAME}) # 이름을 콘솔에 출력
- 빌드 대상 바이너리 추가
ADD_EXECUTABLE(app.out main.c foo.c bar.c)
- 컴파일 옵션 추가
ADD_COMPILE_OPTIONS(-g -Wall)
- 빌드 형상 별 컴파일 옵션
SET(CMAKE_C_FLAGS_빌드_형상 "options")
- 헤더 디렉토리 추가
TARGET_INCLUDE_DIRECTORIES(include)
Reference
'💻 Computer Science > C & C++' 카테고리의 다른 글
[C++] 네임스페이스 (0) | 2024.02.05 |
---|---|
[C++] 함수 (1) | 2024.02.05 |
[C] 전처리기 (0) | 2024.01.12 |
[C] 컴파일 최적화 (0) | 2024.01.10 |
[C] 구조체와 공용체 (0) | 2024.01.10 |