12.2. make

Make) 是一个维护程序组的工具。一旦执行 make(1),make 会读取规则文件 Makefile,自从上次目标文件被修改后,如果目标文件依赖的相关文件发生了改变,那么就会更新目标文件,或者目标文件不存在,那么这些文件更新可能会同时发生。

规则文件的语法如下所示。

  1. 目标:[相关文件 ...]
  2. [TAB] 命令1
  3. [TAB] -命令2 # 忽略错误
  4. [TAB] @命令3 # 禁止回显

这里面的 “[TAB]“ 是一个 TAB 代码。每一行在进行变量替换以后会被 shell 解释。在行末使用 “\“ 来继续此脚本。使用 “$$“ 输入 “$“ 来获得 shell 脚本中的环境变量值。

目标跟相关文件也可以通过隐式规则给出,例如,如下所示。

  1. %.o: %.c header.h

在这里,目标包含了 “%“ 字符 (只是它们中确切的某一个)。”%“ 字符能够匹配实际的目标文件中任意一个非空的子串。相关文件同样使用 “%“ 来表明它们是怎样与目标文件建立联系的。

表 12.10. 自动变量的列表

自动变量
$@当前目标
$<首个相关文件
$?所有较新的相关文件
$^所有相关文件
$目标模式中,$ 指代匹配符 “%“ 匹配的部分

表 12.11. 变量扩展的列表

变量扩展说明
foo1 := bar一次性扩展
foo2 = bar递归扩展
foo3 += bar增加

运行 “make -p -f/dev/null“ 命令来查看内部自动化的规则。