makefile 速成分析和总结.docxVIP

  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 速成,教你一天搞定 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

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

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

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档