- 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笔记
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)