makefile变量赋值
就是:=
,:=
,?=
,+=
这几个的介绍。
下面的内容摘自上面的博客。
= 是最基本的赋值
:= 获取变量当前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值
其中首先要介绍的就是:=
,上面获取当前的值,这是我修改的,因为我觉得它的描述不准确。
博客中给了一个例子:
x = foo
y = $(x) bar
x = xyz
问y
的值是多少,答案是:xyz bar
,就说是说是以第二个值为准。
而对于:=
则是:
x = foo
y:= $(x) bar
x = xyz
这个时候y
就是foo bar
,也就是获取当前x的值,而不是被编译之后的值。
还是上面的例子,这个时候来说明:?=
:
x = foo
z?=$(x)
x=xyz
问,z
是多少,答案是xyz
,就是展开后的值,上面一个例子看不出结果,配合下面这个才可以更好的理解?=
的作用:
x = foo
z=const
z?=$(x)
x=xyz
这个时候,因为z
在之前就定义好值了,所以不会执行z?=$(x)
这里的赋值了。
x = foo
d=$(x)
d+=world
x=xyz
这里的d
的值就是xyz world
,注意!!!会自动加上一个空格。而且这里的x的值也是xyz
。