编译、链接一个项目,仅仅有一个Makefile是不够的,还需要一个工具:make。make是一个命令,它在执行时,可以识别Makefile中定义的规则,并根据规则执行相应操作,(尽可能快的)完成项目的编译工作。为什么说make在编译的时候是尽可能快的呢,这是因为它遵守以下规则:
-
所有的源文件没有被编译过,则对各个 C 源文件进行编译并进行链接,生成最后的可执行程序;
-
每一个在上次执行 make 之后修改过的 C 源代码文件在本次执行 make 时将会被重新编译;
-
头文件在上一次执行 make 之后被修改。则所有包含此头文件的 C 源文件在本次执行 make 时将会被重新编译。
1.4 Makefile规则
Makefile作为项目的管理文件,它主要是由一条条的规则组成的,而每条规则的写法也是有模板的,如下:
TARGET : PREREQUISITES
COMMAND
这就是Makefile中的一条规则的格式,首先,TARGET用于表示这条规则的目标。其次,PREREQUISITES用于表示为了生成这个TARGET所需要的文件(依赖)。最后,COMMAND是一条命令,用于说明如何从PREREQUISITES生成TARGET。make在识别这个规则的时候,首先查目标是什么,然后查所需要的文件,最后执行命令生成目标文件。
规则包含了文件之间的依赖关系和更新此规则目标所需要的命令
一个规则可以有多个命令行,每一条命令占一行。注意:每一个命令行必须以[Tab]字符开始,[Tab]字符告诉 make 此行是一个命令行。make 按照命令完成相应的动作。这也是书写 Makefile 中容易产生,而且比较隐蔽的错误。</