摘要:一个词概括.
" =”(递归)、“ :=”(静态)、“ +=”(追加) “? =”(条件)
1、“=”
make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子: x = foo
y = $(x) bar
x = xyz
在上例中,y的值将会是 xyz bar ,而不是 foo bar 。
2、“:=”
“:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。
x := foo
y := $(x) bar
x := xyz
在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。
3. "+="
"+="表示在原来的值的基础上添加等号后面的值.
all:
x = foo
y = $(foo)
y += $(foo)
@echo $(y)
# make foo=foo
输出 :foo foo
4. "?="
"?=" 如果没有被赋值就为其复制.
x = foo
ifndef x
x = bar
endif
等同于:
x = foo
x ?= bar
输出 foo.