Makefile——使用变量

Posted kelamoyujuzhen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Makefile——使用变量相关的知识,希望对你有一定的参考价值。

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

命名规范

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

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

③“$<”、“[email protected]”这种奇怪的符号是自动化变量

= 和 :=

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

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

=

对于=这种变量定义方式类似于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——使用变量的主要内容,如果未能解决你的问题,请参考以下文章

makefile中的Cflags用法

Linux makefile的基本使用

Linux makefile的基本使用

使用带有 NMake 样式 Makefile 的 clang-cl 无法回显

如何使用Android片段管理器传递变量[重复]

makefile.am 变量在 make 命令中的目标文件之后设置一些库