Makefile은 그냥 빌드를 돕는 도구(from1)이므로 파일 내에서는 -c(참고7), -o 와 같은 플래그들이 사용된다(참고1,2). 약간 생소할 수 있는 플래그 I 를 이용해 헤더파일 디렉토리를 지정해줄 수 있다(참고4). W 로 시작하는 플래그들도 존재한다(참고5). 예를 들어 -Werror 플래그를 지정하는 경우 경고들이 모두 오류로 변경되어 컴파일이 불가능해진다(참고8).
종종 CMake 를 사용하다 보면 -D로 시작하는 괴상한 플래그들을 볼 수 있다(from2:librealsense의 파이썬 플래그). 이것도 마찬가지로 gcc 에서 사용되는 플래그이다. -D는 매크로를 정의할 때 사용된다. -DDEBUG 은 DEBUG 를 정의하는 것이다. 따라서 #ifdef DEBUG 문이 실행될 수 있다. -DVARIABLE=VALUE 와 같이 값을 넣어 정의할수도 있다(참고3).
프로젝트 구조가 아래와 같다면,
.
├── Makefile
├── main.c
├── main.h
├── other.c
└── other.h
Makefile
복사
Makefile 은 아래와 같이 만들 수 있다. 모든 커맨드에 반복적으로 사용되어야 하는 컴파일러나 컴파일러 플래그 같은 부분은 하나의 변수로 묶였음을 알 수 있다.
CC = gcc
CFLAGS = -g
main: main.o other.o
$(CC) ${CFLAGS} -o main main.o other.o
main.o: main.c main.h
$(CC) ${CFLAGS} -c main.c
other.o: other.c other.h
$(CC) ${CFLAGS} -c other.c
clean:
rm -f main main.o other.o
Makefile
복사
Makefile
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.
1.
None
from : 과거의 어떤 생각이 이 생각을 만들었는가?
2.
supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는가?
1.
None
opposite : 어떤 새로운 생각이 이 문서에 작성된 생각과 대조되는가?
1.
None
to : 이 문서에 작성된 생각이 어떤 생각으로 발전되고 이어지는가?
참고 : 레퍼런스