6.1变量中的变量
在定义变量的值时,我们可以使用其他变量来构造变量的值,在Makefile中有两种定义变量的值。
先看第一种方式,也就是简单的使用“=”号,在“=”左侧是变量,右侧是变量的值,右侧变量的值可以定义在
文件的任何一处,也就是说,右侧中的变量不一定非要是已定义好的值,其也可以使用后面定义的值。如:
foo=$(bar)
bar=$(ugh)
ugh=Huh?
all:
echo$(foo)
此时输出的值为“Huh?”可见,变量是可以使用后面的变量来定义的。
这个方法的好处是可以把变量的真实值推到后面来定义,但是不好的地方是当被递归定义时会反复调用例如:
A=$(B)
B=$(A)
这会让 make 陷入无限的变量展开过程中去。
第二种方法是使用“:=”,操作符这种方法,前面的变量不能使用后面的变量,只能使用前面已定义好了的变量。
x:=foo
y:=$(x)bar
x:=later
其等价于:
y:=foobar
x:=later
值得一提的是,这种方法,前面的变量不能使用后面的变量,只能使用前面已定义好了的变量。如果是这样:
y:=$(x)bar
x:=foo
那么,y 的值是“bar”,而不是“foobar”。