- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Makefile变量使用条件及判断使用
Makefile变量使用条件及判断使用
使用变量
————
在Makefile 中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,
在Makefile 中执行的时候其会自动原模原样地展开在所使用的地方。其与C/C++所不同
的是,你可以在Makefile 中改变其值。在Makefile 中,变量可以使用在“目标”,“依
赖目标”,“命令”或是Makefile 的其它部分中。
变量的命名字可以包含字符、数字,下划线(可以是数字开头),但不应该含有“:”、“#”、
“=”或是空字符(空格、回车等)。变量是大小写敏感的,“foo”、“Foo”和“FOO”是三个
不同的变量名。传统的Makefile 的变量名是全大写的命名方式,但我推荐使用大小写搭
配的变量名,如:MakeFlags。这样可以避免和系统的变量冲突,而发生意外的事情。
有一些变量是很奇怪字串,如“$”、“$@”等,这些是自动化变量,我会在后面介绍。
一、变量的基础
变量在声明时需要给予初值,而在使用时,需要给在变量名前加上“$”符号,但最好用小括
号“ ()”或是大括号“{}”把变量给包括起来。如果你要使用真实的“$”字符,那么你需要
用“$$”来表示。
变量可以使用在许多地方,如规则中的“目标”、“依赖”、“命令”以及新的变量中。先看一
个例子:
objects = program.o foo.o utils.o
program : $(objects)
cc -o program $(objects)
$(objects) : defs.h
变量会在使用它的地方精确地展开,就像C/C++中的宏一样,例如:
foo = c
prog.o : prog.$(foo)
$(foo)$(foo) -$(foo) prog.$(foo)
展开后得到:
prog.o : prog.c
cc -c prog.c
当然,千万不要在你的Makefile 中这样干,这里只是举个例子来表明Makefile 中的变
量在使用处展开的真实样子。可见其就是一个“替代”的原理。
另外,给变量加上括号完全是为了更加安全地使用这个变量,在上面的例子中,如果你不想
给变量加上括号,那也可以,但我还是强烈建议你给变量加上括号。
二、变量中的变量
在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile 中有两种方式
来在用变量定义变量的值。
先看第一种方式,也就是简单的使用“=”号,在“=”左侧是变量,右侧是变量的值,右侧变
量的值可以定义在文件的任何一处,也就是说,右侧中的变量不一定非要是已定义好的值,
其也可以使用后面定义的值。如:
foo = $(bar)
bar = $(ugh)
ugh = Huh?
all:
echo $(foo)
我们执行“make all”将会打出变量$(foo)的值是“Huh?” ($(foo)的值是$(bar),
$(bar)的值是$(ugh),$(ugh)的值是“Huh?”)可见,变量是可以使用后面的变量来定
义的。
这个功能有好的地方,也有不好的地方,好的地方是,我们可以把变量的真实值推到后面来
定义,如:
CFLAGS = $(include_dirs) -O
include_dirs = -Ifoo -Ibar
当“CFLAGS”在命令中被展开时,会是“-Ifoo -Ibar -O”。但这种形式也有不好的地方,
那就是递归定义,如:
CFLAGS = $(CFLAGS) -O
或:
A = $(B)
B = $(A)
这会让make 陷入无限的变量展开过程中去,当然,我们的make 是有能力检测这样的定义,
并会报错。还有就是如果在变量中使用函数,那么,这种方式会让我们的make 运行时非常
慢,更糟糕的是,他会使用得两个make 的函数“wildcard”和“shell”发生不可预知的
错误。因为你不会知道这两个函数会被调用多少次。
为了避免上面的这种方法,我们可以使用make 中的另一种用变量来定义变量的方法。这种
方法使用的是“:=”操作符,如:
x := foo
y := $(x) bar
x := later
其等价于:
y := foo bar
x := later
值
您可能关注的文档
- ntel移动版蕊片组介绍.ppt
- s特效代码大全.pdf
- 3委外核销业务.doc
- 精选47X-1气动快速切断阀.doc
- RC12×29型环锤式碎煤机大轴断裂的原因分析.pdf
- -EDIT_使用技巧.doc
- OH活化废弃麻制备活性炭及其结构表征.pdf
- abVIEW控制单片机二极管.doc
- -CNG加气站施工方案.pdf
- ED点阵显示屏原理与设计.pdf
- 2026届高考数学总复习(第1轮)基础版第50讲 直线的方程.pptx
- 《关于组织开展能源领域氢能试点工作的通知》解读及对策.docx
- 二年级数学奇妙的动物世界跨学科项目化学习设计.docx
- 高一美术传承与创新中国近现代美术思政融合课教学设计.docx
- 2025年湖北省省直辖行政单位选调生考试(行政职业能力测验)综合能力测试题带答案.docx
- 2025年温州医科大学仁济学院单招语文测试模拟题库附答案.docx
- 2025年清远职业技术学院单招(语文)测试模拟题库附答案.docx
- 2025年湖北省咸宁市事业单位招聘考试(职业能力倾向测验)题库及答案1套.docx
- 2025年温州大学单招语文测试题库有答案.docx
- 2025年湖北省荆州市单招语文测试模拟题库a4版.docx
文档评论(0)