https://www.gnu.org/software/make/manual/html_node/Rule-Introduction.html

一个简单的makefile包含下面这样的一个或者多个规则

target … : prerequisites …
    recipe
    …
    …

A target is usually the name of a file that is generated by a program; examples of targets are executable or object files. A target can also be the name of an action to carry out, such as ‘clean’ (see Phony Targets).

target(目标)通常是一个文件的名字并且是由接下来的recipe生成. 也可以是一个动作, 比如说clean. (参考Phony Targets)

A prerequisite is a file that is used as input to create the target. A target often depends on several files.

一个prerequisite(先决条件)就是目标的一个输入. 经常来说, 一个目标依赖多个先决条件. (译者注: 但实际上, 先决条件不仅仅可以是一个文件, 也可以是另外的target, 是链式依赖的)

A recipe is an action that make carries out. A recipe may have more than one command, either on the same line or each on its own line. Please note: you need to put a tab character at the beginning of every recipe line! This is an obscurity that catches the unwary. If you prefer to prefix your recipes with a character other than tab, you can set the .RECIPEPREFIX variable to an alternate character (see Special Variables).

Usually a recipe is in a rule with prerequisites and serves to create a target file if any of the prerequisites change. However, the rule that specifies a recipe for the target need not have prerequisites. For example, the rule containing the delete command associated with the target ‘clean’ does not have prerequisites.

A rule, then, explains how and when to remake certain files which are the targets of the particular rule. make carries out the recipe on the prerequisites to create or update the target. A rule can also explain how and when to carry out an action. See Writing Rules.

A makefile may contain other text besides rules, but a simple makefile need only contain rules. Rules may look somewhat more complicated than shown in this template, but all fit the pattern more or less.