make는 파일 관리 유틸리티입니다.
파일간의 종속관계를 파악하여 Makefile(기술 파일)에 적힌대로 컴파일러에 명령하여 SHELL명령이 순차적으로 실행될 수 있게 합니다.
makefile 사용 이유
- 각 파일에 대한 반복적 명령의 자동화로 인한 시간 절약
- 프로그램의 종속 구조를 빠르게 파악 및 관리 용이
- 단순 반복 작업 및 재작성을 최소화
목적파일(Target): 명령어가 수행되어 나온 결과를 저장할 파일
의존성(Dependency): 목적파일을 만들기 위해 필요한 재료
명령어(Command): 실행 되어야 할 명령어들
매크로(macro): 코드를 단순화 시키기 위한 방법
makefile 작성 규칙
1. 매크로 정의는 makefile에 정의한 string으로 치환한다.
2. 명령어의 시작은 반드시 'Tab'으로 시작한다.
3. Dependency가 없는 Target도 상용 가능하다.
[source code]
// ./include/configs.h #define CONFIG
// main.c #include <stdio.h> #include "configs.h" // option -I int main() { #if defined(CONFIG) // macro printf("Hello World\n"); #else printf("Bye World\n"); #endif return 0; }
[makefile]
[result]
$ make
1. all 타겟의 dependency인 test 타겟 명령어 실행
2. clean 타겟 명령어 실행
3. 매크로에 정의된 &{TARGET} 즉, main.o 타겟 실행
4. all의 모든 dependency가 준비된 후, all 명령어 실행
[TIP!]
makefile 작성과정에서 내부 매크로를 사용하여 코드를 단순화 시킬 수 있습니다.
1. $@ : 현재 Target의 이름
2. $^ : 현재 Target의 Dependency 항목 리스트example)