makefile中的all和.PHONY的作用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
makefile中的all和.PHONY的作用

makefile中的all和.PHONY的作用 请编写一个makefile同时编译、链接下面两个程序: main1.c: #includestdio.h int main(void) { ??? printf(main1n); } main2.c: #includestdio.h int main(void) { ??? printf(main2n); } all,并以这两个可执行文件作为依赖。如下: makefile: all:main1 main2 main1: main1.c ??? @gcc main1.c -o main1 main2: main2.c ??? @gcc main2.c -o main2 makefile: all:main1 main2 main1: main1.c ??? @gcc main1.c -o main1 main2: main2.o ??? @gcc main2.o -o main2 main2.o: main2.c ??? @gcc -c main2.c? 如果希望将生成的过程文件删掉,根据前面再增加一个目标clean: all:main1 main2 clean main1: main1.c ??? @gcc main1.c -o main1 main2: main2.o ??? @gcc main2.o -o main2 main2.o: main2.c ??? @gcc -c main2.c? clean: ??? @rm -f main2.o 但是当我们make之后main2.o仍然存在,怎么回事呢 原来这里的目标clean没有任何依赖,make执行时认为这已经到“根上”了(就是认为磁盘上有clean,就像main2.c) 关键字.PHONY可以解决这问题,告诉make该目标是“假的”(磁盘上其实没有clean),这时make为生成这个目标就会将其规则执行一次。.PHONY修饰的目标就是只有规则没有依赖。 加上一句.PHONY:clean all:main1 main2 clean main1: main1.c ??? @gcc main1.c -o main1 main2: main2.o ??? @gcc main2.o -o main2 main2.o: main2.c ??? @gcc -c main2.c? .PHONY:clean clean: ??? @rm -f main2.o ? 【附】 phony [funi] a. 假的 GNU的make能够使整个软件工程的编译、链接只需要一个命令就可以完成。 makefile的术语: 规则:用于说明如何生成一个或多个目标文件 规则的格式: targets:prerequisites ??? command 目标: 依赖 ??? 命令 +++++命令需要以[TAB]键开始++++ makefile 中的PHONY PHONY 目标   PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能。   如果编写一个规则,并不产生目标文件,则其命令在每次make 该目标时都执行。   例如:   clean:   rm *.o temp   因为rm命令并不产生clean文件,则每次执行make clean的时候,该命令都会执行。如果目录中出现了clean文件,则规则失效了:没有依赖文件,文件clean始终是最新的,命令永远不会执行;为避免这个问题,可使用.PHONY指明该目标。如:   .PHONY : clean   这样执行make clean会无视clean文件存在与否。   已知phony 目标并非是由其它文件生成的实际文件,make 会跳过隐含规则搜索。这就是声明phony 目标会改善性能的原因,即使你并不担心实际文件存在与否。   完整的例子如下:   .PHONY : clean   clean :   rm *.o temp   phony 目标不应是真正目标文件的依赖。如果这样,每次make 在更新此文件时,命令都会执行。只要phony 目标不是真正目标的依赖,规则的命令只有在指定此目标时才执行。   phony 目标可以有依赖关系。当一个目录中有多个程序,将其放在一个makefile 中会更方便。因为缺省目标是makefile 中的第一个目标,通常将这个phony 目标叫做all,其依赖文件为各个程序:   all : prog1 prog2 prog3   .PHONY : all   prog1 : prog1.o utils.o   ???????? cc -o prog1 prog1.o utils.o   prog2

文档评论(0)

junjun37473 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档