makeFile
21 Jan 2018 | makefile가장 기본
<target>: <prerequisite>
<recipe> # 앞에 무조건 탭!!
- target
- 작업의 제목
- 보통 새로 만들어질 output filename으로 한다.
- prerequisite
- target을 실행시키기 전에 해야할 작업들
- recipe
- 실제 작업
- 여러개를 가질 수 있다.
vi에서 tab을 강제하려면 ctrl+v 후 tab을 누르면 된다.
예시
hello: main.c
g++ -o hello main.c
- 위처럼 짠 이후,
make hello
를 하면 main.c
가 수정되었는지 확인- 수정 안되어있으면 끝
- 수정되었으면
g++ -o hello main.c
를 수행
target을 지정하지 않을 경우
- target을 지정하지 않고,
make
만 수행하면Makefile
의 가장 위의 target을 찾아서 수행
target명과 생성되는 file 이름이 다를 때
- filename으로 build를 해야할지, 말아야할지 판단하므로, 계속 빌드됨.
- 비효율적임
Phony target(유사 타겟)
hello: main.c
g++ -o hello main.c
clean:
rm -rf hello
Makefile
을 위처럼 만들면make clean
으로hello
파일을 지울 수 있다.- 이렇게 prerequisite없고, 그냥 지정된 명령을 수행하는 것을 Phony target이라 함.
- 그런데
clean
이라는 이름의 파일이 존재한다면?- target명으로 수행여부를 판단하기 때문에,
make clean
이 안먹는다.
- target명으로 수행여부를 판단하기 때문에,
- 그래서 Phony를 쓰는 거였군!!
.PHONY:clean touch # space로 각자를 구분..
hello: main.c
g++ -o hello main.c
clean:
rm -rf hello
touch:
touch hello
- 요렇게 하면 clean, touch에 대해서 Phony target으로 생각한다.
암묵적 룰
main.o: main.c
요렇게만 넣어도 자동으로 g++ -c main.c
로 만들어준다.
이런 암묵적 룰은
*.c
->*.o
*.s
->*.o
*.p
->*.o
요런 것들이 존재한다고 한다.