make -f filename.txt target
make target (找到当前目录或子目录的makefile文件,执行target目标)
make (执行makefile第一行的目标)
makefile的依赖定义:
target:prerequisites ; command 1
‘\t’command2
prerequisites可以省略,多个依赖条件使用空格分开
; \为续航符,链接多少command指令为一行,因为每一行的command都会开启单独进程执行
依赖规则
当目标对应的文件不存在时,执行对应命令
当依赖在时间上比目标更加新时,执行对应命令
当依赖关系连续发生时,对比依赖链上的每一个目标
command命令前面加@符号,表示命令无回显
小技巧:
工程开发中可以讲最终可执行文件名和all同时作为makefile中第一条规则的目标
伪目标:
通过.PHONY关键字声明一个为目标
伪目标不对应任何实际的文件
不管伪目标的依赖是否更新,命令总是执行
伪目标先声明后使用
例如:
.PHONY : clean
##注释##
clean :
rm *.o *.out
绕开.PHONY关键字定义伪目标
原理:如果一个规则没有命令或者依赖,并且他的目标不是一个存在的文件名,在执行此规则时,目标总是会被认为是最新的,所以通过以下方法可以绕开.PHONY关键字定义伪目标
clean : FORCE
rm *.o *.out
FORCE :
makefile的赋值方式
:= 简单赋值
= 递归赋值
?= 条件赋值 (判断当前变量是否第一次赋值,是则赋值)
+= 追加赋值(字符串拼接)
预定义变量的使用
自动变量
$@ 当前规则中触发命令被执行的目标
$^ 当前规则中的所有依赖
$< 当前规则中的第一个依赖
注意: $符号对于makefile有特殊含义,输出时需要加一个$进行转义
$@符号对于bash shell有特殊含义,输出时需要加上\进行转义