设为首页 加入收藏

TOP

3.6.4 make处理Makefile文件的方式
2013-10-12 06:50:16 来源: 作者: 【 】 浏览:72
Tags:3.6.4 make 处理 Makefile 文件 方式

3.6.4  make处理Makefile文件的方式

默认情况下,make会从Makefile文件中第一个目标开始执行(不包括以"."开始的目标)。该目标被称为Makefile的默认最终目标(default goal)。最终目标就是make努力尝试更新的目标。

在上面的例子中,默认最终目标就是更新或创建执行程序"edit",因此我们把相应的规则放在了Makefile的最前面。当我们在命令行上键入命令make时,make就会读取Makefile并开始处理这第一个规则。在例子中,首条规则虽然是重新链接生成"edit",但在make可以完全处理这条规则之前,它必须首先处理"edit"所依赖文件的规则。在例子中就是需要首先创建或更新那些.o目标文件。每一个.o文件都会根据其自身的规则进行处理,即通过编译各自的源文件生成各自的.o目标文件。如果作为目标先决条件的任何源文件或头文件比.o目标文件要新。或者.o目标文件不存在,就需要进行重新编译以更新或创建相应的.o目标文件。

对于Makefile中其他的一些规则,若其目标(文件)出现在最终目标的先决条件中,则也会被处理。若最终目标(或任何目标)并不依赖于某些其他规则,则make并不会处理这些规则,除非我们主动要求make去处理。例如当运行make时,我们可以在命令行上给出Makefile中某个特定规则的目标名称,以执行该目标指定的更新操作,例如使用命令 make clean。

在重新编译一个.o目标文件之前,make会首先考虑更新其先决条件、源文件和头文件。但该Makefile文件没有为源文件和头文件指定任何操作,即源文件和头文件不是任何规则的目标,因此make不会对这些源文件进行任何处理。

在重新编译好所需要的.o目标文件之后,make会决定是否执行重新链接以生成更新过的编辑程序"edit"。这只有当"edit"不存在或者任何.o目标文件比"edit"新时才会进行。如果一个.o目标文件刚被重新编译过,那么它就会比"edit"新,此时make就会重新链接生成新的"edit"。

因此,如果我们修改了文件"insert.c"并运行make,make就会编译该源文件以更新相应的"insert.o",然后链接"edit"。若我们修改了头文件"command.h"并运行make,make就会重新编译目标文件"kbd.o"、"command.o"和"files.o",然后链接生成新的执行文件"edit"。

总体来说,Make程序会使用Makefile文件内容来判断哪些.o目标文件需要被更新,然后确定其中哪些目标确实需要被更新。如果.o目标文件要比其所有相关文件都要新,则说明该.o目标文件已经是最新的而无需再作更新处理。当然,作为第一个最终目标的输入条件(先决条件)中的所有必需目标都会先期执行更新处理。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.6.1 Makefile文件内容 下一篇3.6.7 隐含规则中的自动变量

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: