- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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 中的PHONYPHONY 目标 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
您可能关注的文档
最近下载
- 《电气工程及其自动化专业导论》课程教学大纲.docx VIP
- 一种能模拟任意非线性激活函数的量子系统.pdf VIP
- 小学数学与信息技术教育的跨学科课程融合策略研究教学研究课题报告.docx
- 卡特彼勒3512C发动机零件图册 英文版.pdf VIP
- 临床复用医疗器械集中管理率、职业爆发率、包装合格率等消毒供应中心质控指标体系指标要点.doc VIP
- 地质灾害应急演练脚本.pdf VIP
- 【开学第一课】高三开学第一课(生物)(共28张PPT).pptx VIP
- 提钒炼钢厂点检维护作业区专职点检绩效考核实施细则.doc VIP
- 加油站管理者的领导与团队建设.pptx VIP
- 劳动防护用品基础知识.ppt VIP
文档评论(0)