1.1 结构:
targets:prerequisites
command
1.2 gcc编译:-g,-o,-c,-D,-w,-W,-Wall,-O3
-c:源文件进行编译汇编,但不进行链接
示例:
gcc -c test.cpp -o test
-c后跟多源文件情况
当-c后跟多个源文件,会为每个源文件生成一个.o文件,但此时是不能使用-o的。
参考链接:gcc编译选项-o和-c介绍_gcc -o_chengqiuming的博客-CSDN博客
1.3 自动化变量
自动化变量 |
说明 |
$@ |
表示目标文件 |
$% |
当目标文件是一个静态库文件时,代表静态库的一个成员名。 |
$< |
表示第一个依赖文件。 |
$^ |
代表的是所有依赖文件。 |
$? |
所有比目标文件更新的依赖文件列表。 |
$+ |
类似“$^”,但是它保留了依赖文件中重复出现的文件。主要用在程序链接时库的交叉引用场合。 |
$* |
在模式规则和静态模式规则中,代表“茎”。“茎”是目标模式中“%”所代表的部分(当文件名中存在目录时, |
test:test.o test1.o test2.o
gcc -o $@ $^
test.o:test.c test.h
gcc -o $@ $<
test1.o:test1.c test1.h
gcc -o $@ $<
test2.o:test2.c test2.h
gcc -o $@ $<
GNU make 中在这些变量中加入字符 "D" 或者 "F" 就形成了一系列变种的自动化变量,这些自动化变量可以对文件的名称进行操作。
D表示目录部分,F表示文件部分。如:$(@D)、 $(@F)
1.4 目标文件搜索
4.1 VPATH
VPATH := src car
test:test.o
gcc -o $@ $^
先搜索 src 目录下的文件,再搜索 car 目录下的文件。
4.2 vpath
vpath test.c src car
在两个路径里搜索test.c文件
1.5 伪目标
clean:
rm -rf *.o test