一个简单的 Makefile 描述规则组成:
TARGET... : PREREQUISITES...
开头Tab键COMMAND\
开头Tab键...\
开头Tab键...
比如:
target:规则的目标。通常是最后需要生成的文件名或者为了实现这个目的而必需 的中间过程文件名。可以是.o文件、也可以是最后的可执行程序的文件名等。另外,目 标也可以是一个make执行的动作的名称,如目标“clean”,我们称这样的目标是“伪目标”。
prerequisites:规则的依赖。生成规则目标所需要的文件名列表。通常一个目标依 赖于一个或者多个文件。
command:规则的命令行。是规则所要执行的动作(任意的 shell 命令或者是可在 shell 下执行的程序)。它限定了 make 执行这条规则时所需要的动作。
一个规则可以有多个命令行,每一条命令占一行。注意:每一个命令行必须以[Tab] 字符开始,[Tab]字符告诉 make 此行是一个命令行。make 按照命令完成相应的动作。这也是书写 Makefile 中容易产生,而且比较隐蔽的错误。
命令就是在任何一个目标的依赖文件发生变化后重建目标的动作描述。一个目标可以没有依赖而只有动作(指定的命令)。比如 Makefile 中的目标“clean”,此目标没有依赖,只有命令。它所定义的命令用来删除make 过程产生的中间文件(进行清理工作)。
在 Makefile 中“规则”就是描述在什么情况下、如何重建规则的目标文件,通常规则中包括了目标的依赖关系(目标的依赖文件)和重建目标的命令。make 执行重建目标的命令,来创建或者重建规则的目标(此目标文件也可以是触发这个规则的上一个 规则中的依赖文件)。规则包含了文件之间的依赖关系和更新此规则目标所需要的命令。
一个 Makefile 文件中通常还包含了除规则以外的很多东西(后续我们会一步一步 的展开)。一个最简单的 Makefile 可能只包含规则。规则在有些 Makefile 中可能看起来 非常复杂,但是无论规则的书写是多么的复杂,它都符合规则的基本格式。
make 程序根据规则的依赖关系,决定是否执行规则所定义的命令的过程我们称之为执行规则。