3.6.2 Makefile文件中的规则
简单的Makefile文件中含有一些如下形式的规则。这些规则主要用来描述操作对象(源文件和目标文件)之间的依赖关系。
target(目标)…:prerequisites(先决条件)… command(命令) … … |
其中,target(目标)对象通常是指程序生成的一个文件的名称,例如它可以是一个可执行文件或者是一个以".o"结尾的目标文件(Object File)。目标也可以是所要采取活动的名称,例如"清理"("clean")。这里请注意,由于"target"和"object file"中的"object"通常都被译成中文的"目标",因此为了区别,我们把"target"译作"目标"或直接用其英文,而把object file译为".o文件"。
prerequisite(先决条件或称依赖对象)是用以创建target所必要或者依赖的一系列文件或其他目标。target通常依赖于多个这样的必要文件或目标文件。
command(命令)是指make所执行的操作,通常就是一些shell命令,是生成target需要执行的操作。当先决条件中一个或多个文件的最后修改时间比target文件的要新时,规则的命令就会被执行。另外,一个规则中可以有多个命令,每个命令占用规则中单独一行。请注意,我们需要在写每个命令之前键入一个制表符(按Tab键产生)!
通常,命令存在于具有先决条件的规则中,并且在任何先决条件发生改变时用于创建一个target文件。然而规则中并不一定要有先决条件。例如与target"clean"相关的含有删除命令的规则并不含有先决条件。
此时,一个规则说明了如何以及何时重新创建某些文件,而这些文件是某些具体规则的目标。make会依据先决条件来执行命令以创建或更新target。一个规则也可以说明如何以及何时执行一个操作。
除了规则以外,一个Makefile文件中也可以包含其他文字。但是对于一个简单的Makefile文件来说通常只需要包含一些规则就够了。有些规则可能会比前面给出的规则形式复杂得多,但基本上都是类似的。