intro.
- 단순히 makefile은 make에게 무엇을 할 것인가 말하는 파일이다.
따라서 makefile은 보통 어떻게 컴파일하고, 링크하는 지 명세되어있다.
- make가 에디터를 다시 컴파일 할 때, 변경된 c소스 파일들이 있다면 반드시 다시 컴파일 되어야 한다.
- 만약, 헤더 파일이 변경된다면 헤더 파일을 include 하는 각 C 소스파일도 반드시 다시 컴파일 되어야 한다.
각, 컴파일은 소스파일에 대응하는 오브젝트 파일을 생성한다.
- 어떤 소스파일이 다시 컴파일이 되었다면, 모든 오브젝트 파일들은 들은 그것들이 새로 만들어진 것이든 아니든 반드시 같이 링크되어서 새로운 편집기 실행파일을 만들어야 한다.
1. Makefile 규칙의 모습
target ... : dependencies ...
command
...
...
정의
- target
- dependency
- command
- makefile rule
- 일반적으로 command는 dependencies와 함께 한 규칙한에 존재한다.
- dependencies 중 어떤 것이라도 변했다면 target 파일을 생성하는 일을 하지만 target을 위한 command들을 지정하는 규칙이 반드시 dependencies를 가질 필요는 없다.
- ex) clean이라는 target과 연관된 삭제 command를 담고 있는 규칙은 dependencies를 가지지 않는다.
- make는 target을 생성하거나 업데이트하기 위해서 dependencies에 command를 수행한다.
2 - 1. 단순한 Makefile
# example file
edit : main.o kbd.o command.o display.o insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o \\
insert.o search.o files.o utils.o
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o \\
insert.o search.o files.o utils.o