makefile总结

makefile常见问题

PHONY

.PHONY是一个伪目标,可以防止在makefile中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突。

不添加时

1
2
clean:
rm -rf *.o

且,在makefile所在目录下,有一个clean文件,运行make clean

make: "clean"是最新的

并没有执行rm命令

添加时

1
2
3
.PHONY:clean
clean:
rm -rf *.o

运行make clean,则执行了rm命令。

特殊字符

$和$

$var是makefile的变量,$$var是shell命令内定义的变量,两者是不共享的。

1
2
3
4
5
6
VAR=3
target:
echo $(VAR);\
VAR=4;\
echo $(VAR);\
echo $$VAR
1
2
3
3
3
4

注意,如果每行不加\,那将是一个单独的shell命令,变量是不保存的。

$@ $^ $<

$@ 目标文件

$^ 所有依赖文件,以空格分隔,去除重复的依赖目标,只保留一份

$< 第一个依赖文件

$? 所有有更新的依赖目标合集