Makefile笔记.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笔记

Makefile笔记 1.Makefile的三个概念: 1.目标target(指运行Makefile要生成什么) 2.依赖关系dependency(生成目标需要依赖的其他目标) 3.命令command(告知make如何生成目标) 2.一个Makefile可以定义多个目标 3.调用make命令时,需要指明具体目标,若没有告知目标,make将以文件中定义的第一个目标作为运行目标,那么第一个目标就是默认目标 4.当make得到目标后,先找到构建目标的对应规则,然后运行规则中的命令来达到构建目标的目的 all: echo hello world test: @echo just for test! 命令行以@打头的含义: 在执行到的时候不回显相应的命令内容,只显示命令的输出。 make通过判断文件的时间戳来判断文件是否改变,若改变则多相应的文件进行相应的编译。 5.Makefile中假目标(phone target)的引入: .PHONY:clean #在此通过PHONY对clean申明为假目标,即:make不会将clean当作文件处理。 6.运用“变量”提高可维护性: 定义变量:CC = gcc 或 MM 即:定义变量是其值可以为空 引用变量:“$(CC)”或${MM} 自动变量: $@:用于表示一个规则中的目标。当一个规则中有多个目标时,$@所指的是其中任何规则命令被运行的目标。 $^:表示的是规则中所有的先决条件。 $:表示的是规则中的第一先决条件。 eg: target:sourc1.c sourc2.c gcc source1.c sourc2.c 其中$@指代target,$^指代source1.c source2.c, $指代source1.c 。 实例: .PHONY:all all:first second third @echo \$$@ = $@ @echo $$^ = $^ @echo $$ = $ first second third: 7.特殊变量 MAKE和MAKECMDGOALS MAKE变量表示的是当前处理Makefile的命令是什么。 当需要在Makefile中运行另一个Makefile时,需要用到这个变量。 eg: .PHONY:all all: @echo MAKE = $(MAKE) MAKECMDGOALS表示当前构建的目标名。 eg:.PHONY:all all: @echo MAKECMDGOALS = $(MAKECMDGOALS) 8.变量的类别与赋值 变量的类别有:递归扩展变量和简单扩展变量 递归扩展变量:用“=”符号定义的变量被称为递归扩展变量 eg: .PHONY:all foo = $(bar) bar = $(ugh) ugh = Huh? all: @echo $(foo) 结果:Huh? 简单扩展变量:用“:=”操作符来定义,对于这种变量make只对其进行一次展开。 eg: .PHONY:all x = foo y = $(x) b x = later xx := foo yy := $(xx) b xx := later all: @echo x = $(y), xx = $(yy) 结果:x = later_b,xx = foo_b .PHONY:all objects = main.o foo.o bar.o utils.o objects = $(objects) another.o all: @echo $(objects) 条件赋值“?=”: 当变量没有定义时就定义它,并且将右边的值赋给它,若没有定义,则不改变其原值。 条件赋值可用于为变量赋默认值 追加赋值“+=” eg:.PHONY:all objects = main.o foo.o bar.o utils.o objects += another.o all: @echo $(objects) 9.高级变量引用功能 eg: .PHONY:all foo = a.c b.c c.c bar := $(foo:.c=.o) all: @echo bar =

文档评论(0)

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

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

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档