免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3034 | 回复: 1
打印 上一主题 下一主题

makefile(6) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2002-07-09 09:17 |只看该作者 |倒序浏览
标  题: 关于makefile(6)

2.4 隐含规则 (Implicit Rules)
请注意,在上面的例子里,几个产生 .o 文件的命令都是一样的。 都是从 .c 文件和 相关文件里产生 .o 文件,这是一个标准的步 骤。其实 make 已经知道怎么做——它 有一些叫做隐含规则的内 置的规则,这些规则告诉它当你没有给出某些命令的时候, 应该 怎么办。如果你把生成 foo.o 和 bar.o 的命令从它们的规则中删除, make 将会查找它的隐含 规则,然后会找到一个适当的命令。它的命令会 使用一些变量,因此你可以按照你的 想法来设定它:它使用变量 CC 做为编译器(象我们在前面的例子),并且传递变量 CFLAGS (给 C 编译器,C++ 编译器用 CXXFLAGS ),CPPFLAGS ( C 预 处理器旗 标), TARGET_ARCH (现在不用考虑这个),然后它加 入旗标 '-c' ,后面跟变量 $< (第一个依靠名),然后是旗 标 '-o' 跟变量 $@ (目的文件名)。
一个C编译的 具体命令将 会是:$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@ 当然你可以按照你自己的需要来定义这些变量。这就是为什么用 gcc 的 -M 或 -MM 开 关输出的码可以直接用在一个 makefile 里。 2.5 假象目的 (Phony Targets) 假设你的一个项目最后需要产生两个可执行文件。你的主要目标 是产生两个可执行文 件,但这两个文件是相互独立的——如果一 个文件需要重建,并不影响另一个。你可 以使用“假象目的”来 达到这种效果。一个假象目的跟一个正常的目的几乎是一样 的, 只是这个目的文件是不存在的。因此, make 总是会假设它需要 被生成,当把它 的依赖文件更新后,就会执行它的规则里的命令 行。 如果在我们的 makefile 开始处输入:
all : exec1 exec2 其中 exec1 和 exec2 是我们做为目的的两个可执行文件。 make 把这个 'all' 做为 它的主要目的,每次执行时都会尝试把 'all' 更新。但既然这行规则里没有哪个命令 来作用在一个叫 'all' 的 实际文件(事实上 all 并不会在磁碟上实际产生),所以 这个规 则并不真的改变 'all' 的状态。可既然这个文件并不存在,所以 make 会尝试 更新 all 规则,因此就检查它的依靠 exec1, exec2 是否需要更新,如果需要,就把 它们更新,从而达到我们的目的。 假象目的也可以用来描述一组非预设的动作。例如,你想把所有由 make 产生的文件删 除,你可以在 makefile 里设立这样一个规则:
veryclean :
rm *.o
rm myprog
前提是没有其它的规则依靠这个 'veryclean' 目的,它将永远 不会被执行。但是,如果你明确的使用命令 'make veryclean' , make 会把这个目的做为它的主要目标,执行那些 rm 命令。如果你的磁碟上存在一个叫 veryclean 文件,会发生什么事?这 时因为在这个规则里 没有任何依靠文件,所以这个目的文件一定是 最新的了(所有的依靠文件都已经是最 新的了),所以既使用户明 确命令 make 重新产生它,也不会有任何事情发生。解决 方法是标 明所有的假象目的(用 .PHONY),这就告诉 make 不用检查它们 是否存在 于磁碟上,也不用查找任何隐含规则,直接假设指定的目 的需要被更新。在 makefile 里加入下面这行包含上面规则的规则:
..PHONY : veryclean
就可以了。注意,这是一个特殊的 make 规则,make 知道 .PHONY 是一个特殊目的, 当然你可以在它的依靠里加入你想用的任何假象 目的,而 make 知道它们都是假象目 的。

论坛徽章:
0
2 [报告]
发表于 2003-08-30 18:38 |只看该作者

makefile(6)

收到
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP