makefile常见问题
PHONY
.PHONY是一个伪目标,可以防止在makefile中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突。
不添加时
1 | clean: |
且,在makefile所在目录下,有一个clean文件,运行make clean
make: "clean"是最新的
并没有执行rm命令
添加时
1 | .PHONY:clean |
运行make clean
,则执行了rm命令。
特殊字符
$和$
$var是makefile的变量,$$var是shell命令内定义的变量,两者是不共享的。
1 | VAR=3 |
1 | 3 |
注意,如果每行不加\,那将是一个单独的shell命令,变量是不保存的。
$@ $^ $<
$@ 目标文件
$^ 所有依赖文件,以空格分隔,去除重复的依赖目标,只保留一份
$< 第一个依赖文件
$? 所有有更新的依赖目标合集