12.2. make
Make) 是一个维护程序组的工具。一旦执行 make(1),make
会读取规则文件 Makefile
,自从上次目标文件被修改后,如果目标文件依赖的相关文件发生了改变,那么就会更新目标文件,或者目标文件不存在,那么这些文件更新可能会同时发生。
规则文件的语法如下所示。
目标:[相关文件 ...]
[TAB] 命令1
[TAB] -命令2 # 忽略错误
[TAB] @命令3 # 禁止回显
这里面的 “[TAB]
“ 是一个 TAB 代码。每一行在进行变量替换以后会被 shell 解释。在行末使用 “\
“ 来继续此脚本。使用 “$$
“ 输入 “$
“ 来获得 shell 脚本中的环境变量值。
目标跟相关文件也可以通过隐式规则给出,例如,如下所示。
%.o: %.c header.h
在这里,目标包含了 “%
“ 字符 (只是它们中确切的某一个)。”%
“ 字符能够匹配实际的目标文件中任意一个非空的子串。相关文件同样使用 “%
“ 来表明它们是怎样与目标文件建立联系的。
表 12.10. 自动变量的列表
自动变量 | 值 |
---|---|
$@ | 当前目标 |
$< | 首个相关文件 |
$? | 所有较新的相关文件 |
$^ | 所有相关文件 |
$ | 目标模式中,$ 指代匹配符 “% “ 匹配的部分 |
表 12.11. 变量扩展的列表
变量扩展 | 说明 |
---|---|
foo1 := bar | 一次性扩展 |
foo2 = bar | 递归扩展 |
foo3 += bar | 增加 |
运行 “make -p -f/dev/null
“ 命令来查看内部自动化的规则。