码迷,mamicode.com
首页 > 其他好文 > 详细

Makefile——使用变量

时间:2018-08-13 22:55:38      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:close   lag   等价   $$   区分   event   推荐   echo   变量定义   

在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串。变量可以使用在“目标”,“依赖目标”,“命令”或是Makefile的其它部分中。

命名规范

①变量大小写敏感,推荐大小写搭配命名,方便区分系统变量(全大写)

②变量名字可以包含字符、数字,下划线(可以是数字开头),但不可以含有“:”、“#”、“=”或是空字符(空格、回车等)

③“$<”、“$@”这种奇怪的符号是自动化变量

= 和 :=

变量定义方式:变量名 = 值

变量在声明时需要给予初值,而在使用时,需要给在变量名前加上“$”符号,但最好用小括号“()”或是大括号“{}”把变量给包括起来。如果你要使用真实的“$”字符,那么你需要用“$$”来表示。

=

对于=这种变量定义方式类似于C中的宏,见代码

 

技术分享图片
foo = $(bar)
bar = $(ugh)
ugh = Huh?
all:
echo $(foo)
View Code

 

使用=定义变量时,等号右侧的值可以是后面出现的变量。

这样做带来的好处是把变量的真实值推到后面来定义

技术分享图片
CFLAGS = $(include_dirs) -O
include_dirs = -Ifoo -Ibar
View Code

当“CFLAGS”在命令中被展开时,会是“-Ifoo -Ibar -O”

这样做带来的坏处就是递归定义

技术分享图片
CFLAGS = $(CFLAGS) -O
或:
A = $(B)
B = $(A)
View Code

这会让make陷入无限的变量展开过程中去,当然,我们的make是有能力检测这样的定义,并会报错。

:=

=定义变量会出问题的根源就在于他可以使用后面定义的变量。:=就彻底放弃使用后面定义变量的做法,他只能使用前面定义的变量(=也可以使用前面定义的变量,这是很自然的)

技术分享图片
x := foo
y := $(x) bar
x := later
其等价于:
y := foo bar
x := later
View Code

 

 

Makefile——使用变量

标签:close   lag   等价   $$   区分   event   推荐   echo   变量定义   

原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9471504.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!