枫林在线论坛精华区>>程序设计
[255617] 主题: 跟我一起写 Makefile(十二)
作者: redhat (RedHat)
标题: 跟我一起写 Makefile(十二)[转载]
来自: 192.168.*.*
发贴时间: 2004年07月24日 12:40:46
长度: 10890字

隐含规则
————

在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的
东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o]文件
,Windows下是[.obj]文件)。本章讲述的就是一些在Makefile中的“隐含
的”,早先约定了的,不需要我们再写出来的规则。

“隐含规则”也就是一种惯例,make会按照这种“惯例”心照不喧地来运
行,那怕我们的Makefile中没有书写这样的规则。例如,把[.c]文件编译
成[.o]文件这一规则,你根本就不用写出来,make会自动推导出这种规则
,并生成我们需要的[.o]文件。

“隐含规则”会使用一些我们系统变量,我们可以改变这些系统变量的值
来定制隐含规则的运行时的参数。如系统变量“CFLAGS”可以控制编译时
的编译器参数。

我们还可以通过“模式规则”的方式写下自己的隐含规则。用“后缀规则
”来定义隐含规则会有许多的限制。使用“模式规则”会更回得智能和清
楚,但“后缀规则”可以用来保证我们Makefile的兼容性。
我们了解了“隐含规则”,可以让其为我们更好的服务,也会让我们知道
一些“约定俗成”了的东西,而不至于使得我们在运行Makefile时出现一
些我们觉得莫名其妙的东西。当然,任何事物都是矛盾的,水能载舟,亦
可覆舟,所以,有时候“隐含规则”也会给我们造成不小的麻烦。只有了
解了它,我们才能更好地使用它。


一、使用隐含规则

如果要使用隐含规则生成你需要的目标,你所需要做的就是不要写出这个
目标的规则。那么,make会试图去自动推导产生这个目标的规则和命令,
如果make可以自动推导生成这个目标的规则和命令,那么这个行为就是隐
含规则的自动推导。当然,隐含规则是make事先约定好的一些东西。例如
,我们有下面的一个Makefile:

    foo : foo.o bar.o
            cc 
========== * * * * * ==========
返回