复习:Makefile描述规则组成:
TARGET(目标)... : PREREQUISITES...(规则的依赖)
[tab] COMMAND
...
...
目录
目录
6.Makefile " = ", " := ", " ?= " ," += "操作符含义
6.Makefile " = ", " := ", " ?= " ," += "操作符含义
1.执行make命令哪几种文件会被重新编译
2.make如何工作
- make程序会把出现在第一条规则之后的所有[Tab]字符开始的行作为命令行处理
- make执行的是Makefile的第一个规则,此规则的第一个目标是“最终目的”或“终极目标”
- make不做任何错误检查
总结:对于一个Makefile文件,make首先解析终极目标所在的规则,按照依赖文件列表从左到右顺序寻找创建这些依赖文件的规则。假设现在为第一个依赖文件寻找规则,如果第一个依赖文件依赖于其它文件,同样为这个依赖文件寻找规则,直到找到所有依赖文件的创建规则(这里还是终极目标的第一个依赖文件执行过程),开始回退,完成终极目标第一个依赖文件的创建和更新。之后对第二个,第三个...,按照依赖文件顺序执行。
3.Makefile 伪目标
伪目标:不代表真正文件名,不创建目标文件,没有依赖文件
如 clean:
rm *.o temp
输入make clean 就会执行rm *.o temp
4.命令的执行
5.Makefile中的变量
5.1变量的特征
5.2 变量引用
引用方式:
举例:
5.3 引用格式
5.4 “?=”操作符
5.5内嵌变量
6.Makefile " = ", " := ", " ?= " ," += "操作符含义
6.1 " = "
赋值符号,变量的值是整个Makefile最后被指定的值,类似非阻塞赋值?
VIR_A = A
VIR_B = $(VIR_A) B
VIR_A = AA
最终结果:VIR_B = AA B
6.2 " := "
:= :直接赋值
VIR_A := A
VIR_B := $(VIR_A) B
VIR_A := AA
最终结果:VIR_B = A B
6.3 " ?= "
?= :表示如果改变量没有被赋值,则赋值等号后的值,5.4有讲
VIR := old
VIR ?= new
结果:VIR = old
6.4 " += "
+= : 理解为追加,将等号后面的值添加到前面的变量上
7. 自动化变量
$@、$<、$%、$* :代表文件名
$?、$+、$^:代表文件名列表
7.1 $@
7.2 $%
7.3 $<
7.4 $?
所有比目标文件更新的依赖文件列表,空格分割。如果目标是静态库文件名,代表的是库成员(.o文件)