makefile 规则基本格式
一条 makefile 规则由以下几部分组成:
target ... : prerequisites ... recipe ... ...
Please note: you need to put a tab character at the beginning of every recipe line!
makefile 没有在命令行中指定执行哪部分时候,第一个 target 会作为最终目标,下边所示的code生成 test_1.o 之后就会结束。
$ cat makefile
test_1.o : test_1.c gcc -c test_1.c test_2.o : test_2.c gcc -c test_2.c
下边所示代码中,第一行为生成 test_1.o、 test_2.o 提供规则。也就是说,第一行的 target 不会成为 goal, goal 为 all。
$ cat makefile %.o : %.c gcc -c -O2 $< all : test_1.o test_2.o clean: rm *.o
makefile 规则隐藏彩蛋
当最终的goal与prerequisites中某一个文件名相同时,会自动链接生成以该文件名命名的可执行文件。
$ cat Makefile TEST_1 := test_1.o TEST_2 := test_2.o test_1: $(TEST_1) $(TEST_2) clean: rm *.o
当一个target 分多次指定 prerequisites 时,多次指定的 prerequisites 都参与 target 的生成。
$ cat Makefile test : test_1.o test : test_2.o test : test.o
makefile 规则中特殊 target(GNU makefile 4.8)
某些名字作为 target 时有特殊意义。
- .EXPORT_ALL_VARIABLES 表示将所有的变量传递给下层makefile