使用:=
在Makefile中使用 := 赋值方式定义变量时,如果该变量定义中包含了其他变量的引用,那么这些引用所表示的值将在变量定义时即被展开。也就是说,子变量会被立即展开,并赋值给父变量。
例如,在 Makefile 中有以下的变量定义:
FOO := A123
BAR := $(FOO) B456
FOO := C789
在这里,变量BAR的值是$(FOO) B456
,其中 $(FOO)
表示一个子变量,即它的值是变量FOO
的值。因为变量FOO
被赋值为A123
,所以 BAR
的值为:
A123 B456
此时再将FOO
重新赋值为C789
,不会影响BAR
的值,因为变量BAR
已经在 Makefile 中被定义好。
使用 =
和 :=
不同的是,使用 =
赋值符号赋值的变量,变量中的子变量引用会在被使用时才被展开。例如:
FOO = A123
BAR = $(FOO) B456
FOO = C789
在这个例子中,变量 BAR
的值仍然是$(FOO) B456
,但是因为是使用 =
赋值的方式定义变量,所以在 BAR
在实际使用前,$(FOO)
所表示的值将被展开并赋值给变量 BAR
。
因此,此处 BAR
的值是:
C789 B456
总之,使用 :=
赋值符号,在Makefile中定义变量时,子变量引用会在变量定义时立即展开;
而使用 =
赋值符号,子变量引用会在变量使用时才被展开。