标签:close lag 等价 $$ 区分 event 推荐 echo 变量定义
在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串。变量可以使用在“目标”,“依赖目标”,“命令”或是Makefile的其它部分中。
命名规范
①变量大小写敏感,推荐大小写搭配命名,方便区分系统变量(全大写)
②变量名字可以包含字符、数字,下划线(可以是数字开头),但不可以含有“:”、“#”、“=”或是空字符(空格、回车等)
③“$<”、“$@”这种奇怪的符号是自动化变量
= 和 :=
变量定义方式:变量名 = 值
变量在声明时需要给予初值,而在使用时,需要给在变量名前加上“$”符号,但最好用小括号“()”或是大括号“{}”把变量给包括起来。如果你要使用真实的“$”字符,那么你需要用“$$”来表示。
=
对于=这种变量定义方式类似于C中的宏,见代码
foo = $(bar) bar = $(ugh) ugh = Huh? all: echo $(foo)
使用=定义变量时,等号右侧的值可以是后面出现的变量。
这样做带来的好处是把变量的真实值推到后面来定义
CFLAGS = $(include_dirs) -O
include_dirs = -Ifoo -Ibar
当“CFLAGS”在命令中被展开时,会是“-Ifoo -Ibar -O”
这样做带来的坏处就是递归定义
CFLAGS = $(CFLAGS) -O 或: A = $(B) B = $(A)
这会让make陷入无限的变量展开过程中去,当然,我们的make是有能力检测这样的定义,并会报错。
:=
=定义变量会出问题的根源就在于他可以使用后面定义的变量。:=就彻底放弃使用后面定义变量的做法,他只能使用前面定义的变量(=也可以使用前面定义的变量,这是很自然的)
x := foo y := $(x) bar x := later 其等价于: y := foo bar x := later
标签:close lag 等价 $$ 区分 event 推荐 echo 变量定义
原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9471504.html