- 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 速成,教你一天搞定 makefile,略加实践掌
握其最核心部分。
可以从下面的几个维度来学习和理解 makefile:
?
?
规则
?
变量
?
函数
?
命令
?
make 的命令选项
?
一个大型项目的 makefile 例子
?
make –p 的输出概览
在正式介绍 makefile 的以上四个方面之前,首先一句话概括一下 makefile 是什么:makefile 是用来描述文件依赖关系,并告诉make 命令如何根据这种依赖关系,调用 shell 完成目标文件建立的文件。
makefile 的执行时通过两步来完成的,第一步是扫描文件中的依赖关系,并藉此建立依赖关系树,然后从最底层想上来执行。
规则(rule)
Makefile 从本质上说就是描述项目中文件依赖关系的文件。这种依赖关系的描述就是规则。Makefile 的编写中的一切都是围绕规则来展开的,上面提到的四个方面:规则、变量、函数、命令都是为了规则能够方便快捷的发挥作用才引入的。
一个简单规则可以表述为:
目标文件:依赖文件(不同文件以空格分隔)
tab得到目标文件需要的命令规则的常见种类有:
??
??Explicit Rule 最简单的rule,明确指出了目标和依赖,以及如何有依赖得
到目标。举例:
??Pattern
??Pattern Rule 使用了wildcard(通配符)的规则。makefile 中的通配符是百分号%,相当于 bash 中的*,在描述规则的时候使用的都是%。makefile 中也可以看到通配符*,这个一般是出现在命令之中,命令是要放到 shell 中运
行的,所以要使用*作为通配符。举例:
prog:*.c
g++ -o prog $^
??
??Suffix Rule 顾名思义,是只使用后缀来描述的rule,描述的时候不使用
pattern,举例:
.c.o:
.c.o:
$(COMPILE.C) $(OUTPUT_OPTION) $
这个 suffix rule 的作用和下面这个 pattern rule 的作用是完全一样的。
区别仅在于描述依赖的时候,一个把目标放在后,一个把目标放在前面。
%.o:%.c
$(COMPILE.C) $(OUTPUT_OPTION) $
??
??Implicit Rule 就是看不到的rule,这些 rule 是 make 的内置 rule。makefile 有众多的build-in rule,这些规则为我们编写 makefile 带来了很大的便利。它们可以通过 make –p 来查看(在“# Implicit Rules “部分)。另外内置的规则里面还有大量的后缀规则,由于这些后缀规则在 makefile 中也不能直接看到,所以也可以叫做 implicit rule。
上面说的 rule 目标文件都是实实在在的文件,还有一种目标,它不代表文件, 叫做 phony target(伪目标)。伪目标总是未更新的。最常用的就是clean 这个 phony target,他声明为:
.PHONY: clean clean:
ls;who;rm *.cpp
伪目标可以帮用来帮我们测试我们的 makefile,当我们想测试一段Makefile 是不是正确的时候,可以把要执行的命令放到伪目标(比如伪目标test)的下面,然后执行 make test 就可以查看执行结果了。
变量自动变量
刚刚在介绍规则的时候用到了$,这东西是什么呢?他是 makefile 中的
automatic variable。这中变量是 Makefile 特有的变量,他是在股则的命令中自动得到的,不同规则中执行命令时使用相同的自动变量得到的结果不同,正是因为这个原因,所以叫做自动变量。下面列出最常用的自动变量:
??$@ 规则的目标
??$% 档案文件成员(archive member)结构中的文件名元素
??$ 第一个依赖文件名
??$^ 所有的依赖文件名(已经消重),以空格分隔
??$+ 所有的依赖文件名(未经消重),以空格分隔
??$* 所有除掉后缀的依赖文件名,以空格分隔,仅适用于模式规则。注:文件名包含 stem 和 suffix,去掉 suffix 就剩下了 stem。比如 hello.cpp 的 stem是 hello,suffix 就是 cpp。
??$? 比目标文件新的依赖文件。
vpath 和 VPATH 变量
vpath
vpath 用来告诉 make 命令到什么地方去寻找文件。如:
VPATH:src
也可以用下面的形式,告诉 make 命令到指定的文件去查找对应类型的文件:
vpath %.h $(include_dirs)
vpat
您可能关注的文档
最近下载
- [电信行业]移动通信技术移动信道中的电波传播及干扰.pptx VIP
- (课堂教学课件4)七颗钻石.ppt VIP
- Unit 1 长难句分析讲义--高中英语人教版(2019)选择性必修第一册.docx VIP
- 高等教育心理学知识点-.docx VIP
- 2025及以后5年中国碳纤维行业市场运营格局及前景战略分析报告.docx
- 常见微生物与相关疾病.ppt VIP
- 人民医院皮肤性病科临床技术操作规范2023版.pdf VIP
- 三年级下册语文课件-第18课 七颗钻石第一课时|人教新课标 (共20张PPT).pptx VIP
- 2023年绵阳中学自主招生数学试题.doc VIP
- 二下数学混合运算看图列综合算式专项题型练习(含答案12页).pdf VIP
文档评论(0)