makefile规则
1 2 3 4
| target: prerequisites command ... ...
|
target
可以是一个目标文件,也可以是一个执行文件。
prerequisites
是要生成target所需要的文件或是目标。
command
是make需要执行的命令。(任意的shell命令)
target这一个或多个目标文件依赖于prerequisites中的文件,其生成规则定义在command中。
prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。
示例
如一个工程有3个头文件,5个c文件,makefile如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| edit: main.o command.o display.o insert.o search.o #后面的.o文件比edit可执行文件新,才会执行下面的命令 gcc -o edit main.o command.o display.o insert.o search.o
main.o: main.c defs.h gcc -c main.c command.o: command.c defs.h command.h gcc -c command.c display.o: display.c defs.h buffer.h gcc -c display.c insert.o: insert.c defs.h buffer.h gcc -c insert.c search.o: search.c defs.h buffer.h clean: rm edit main.o command.o display.o insert.o search.o
|
文件保存为”makefile”或”Makefile”,在该目录下执行make
就可以生成可执行文件edit。要删除生成的文件就执行make clean
makefile中使用变量
makefile起始处声明变量:
1
| OBJ = main.o command.o display.o insert.o search.o
|
这样就可以在makefile中用$(OBJ)
来使用这个变量了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| OBJ = main.o command.o display.o insert.o search.o edit: $(OBJ) gcc -o edit $(OBJ) main.o: main.c defs.h gcc -c main.c command.o: command.c defs.h command.h gcc -c command.c display.o: display.c defs.h buffer.h gcc -c display.c insert.o: insert.c defs.h buffer.h gcc -c insert.c search.o: search.c defs.h buffer.h clean: rm edit main.o command.o display.o insert.o search.o
|
makefile自动推导
makefile看到一个o文件,就会把c文件加到依赖关系中,并且gcc -c *.c
也会被推导出来:
1 2 3 4 5 6 7 8 9 10 11
| OBJ = main.o command.o display.o insert.o search.o CC = gcc edit: $(OBJ) $(CC) -o edit $(OBJ) main.o: defs.h command.o: defs.h command.h display.o: defs.h buffer.h insert.o: defs.h buffer.h search.o: defs.h buffer.h clean: rm edit $(OBJ)
|
C++的makefile
1 2 3 4 5 6 7 8 9 10 11
| CC = g++ STD = -std=c++11 SRC = main.cpp student.cpp OBJ = main.o student.o
main: $(OBJ) $(CC) $(STD) $(OBJ) -o $@ $(OBJ): student.h $(CC) $(STD) -c $(SRC) clean: rm -f main $(OBJ)
|