Linux Programming, Language C 3 – MAKE

上两篇我们讲了GCC编译器、GDB调试器,现在我们讲讲MAKE。

GNU MAKE

在软件开发中,make是一个工具程序(Utility software),经由读取叫做“makefile”的文件,自动化建构软件。
它是一种转化文件形式的工具,转换的目标称为“target”;与此同时,它也检查文件的依赖关系,如果需要的话,它会调用一些外部软件来完成任务。它的依赖关系检查系统非常简单,主要根据依赖文件的修改时间进行判断。大多数情况下,它被用来编译源代码,生成结果代码,然后把结果代码连接起来生成可执行文件或者库文件。
它使用叫做“makefile”的文件来确定一个target文件的依赖关系,然后把生成这个target的相关命令传给shell去执行。

它的作用功能和集成开发环境是一样的。

Make与Makefile的关系
就像Shell与脚本,计算机与程序之间的关系。Makefile告诉Make要去做什么,需要什么,以及怎么样做。而Make负责执行这些指令。

Makefile
规则是Makefile的重要组成部分,它规定了做什么,需要什么,以及怎么样去做这三部分的内容。规则包含了文件之间的依赖关系和更新此规则目标所需要的命令。
一个规则结构如下:

目标(TARGET)程序产生的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“clean”。
依赖(DEPENDENCIES)是用来产生目标的输入文件,一个目标通常依赖于多个文件。
命令(COMMAND)是make 执行的动作,一个可以有多个命令,每个占一行。
注意:每个命令行的起始字符必须为TAB 字符!

有依赖关系规则中的命令通常在依赖文件变化时负责产生target 文件,make 执行这些命令更新或产生target。规则可以没有依赖关系,如包含target “clean”的规则。
规则解释如何和何时重做该规则中的文件,make 根据依赖关系执行产生或更新目标;规则也说明如何和何时执行动作。有的规则看起来很复杂,但都符合上述模式。

Make执行的路线
当在shell提示符下输入“make”命令以后。make读取当前目录下的Makefile文件,并将Makefile文件中的第一个目标作为其执行的“终极目标”,开始处理第一个规则。根据其依赖文件依次寻找创建这些依赖文件的规则。首先为第一个依赖文件寻找创建规则,如果第一个依赖文件依赖于其它文件,则同样为这个依赖文件寻找创建规则,直到为所有的依赖文件找到合适的创建规则。之后make从最后一个规则回退开始执行,最终完成终极目标的第一个依赖文件的创建和更新.对于规则中的每一个依赖文件,使用同样方式去重建它,在完成对所有依赖文件的重建之后,最后一步才是重建此规则的目标。

Make命令

make首先分析所有的宏定义参数(带嵌入等号的参数)并进行赋值,宏命令行覆盖在makefile中进行的定义,然后检验选项标志,最后递归的对每一个目的依赖文件进行检查。

make命令其实不多,因为make的核心在于makefile的写法。
这又涉及到很多的内容,为了不给看这篇文章的访客太大压力,我们决定在接下来的文章再详解makefile文件的写法。

如无注明,均为原创。转载请注明: 转载自MITGAI`S THINKING
本文链接地址: Linux Programming, Language C 3 – MAKE

知识共享许可协议本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

如果本文对您生活或工作产生了积极影响,那我非常高兴。
如果您愿意为文章的内容或想法提供支持,欢迎点击下边的捐赠按钮,资助作者创作更多高价值高品质的内容。
支付宝捐赠
anyShare分享到:

发表回复