3 回答
TA贡献1820条经验 获得超2个赞
懒集
VARIABLE = value
变量的正常设置 - 当使用变量时,不会在声明变量时递归地扩展变量中的值
立即设定
VARIABLE := value
通过简单扩展内部值来设置变量 - 其中的值在声明时间扩展。
设置如果缺席
VARIABLE ?= value
仅在变量没有值时设置变量
附加
VARIABLE += value
将提供的值附加到现有值(如果变量不存在,则设置为该值)
TA贡献1836条经验 获得超3个赞
使用=会导致为变量赋值。如果变量已有值,则替换它。使用时,该值将被扩展。例如:
HELLO = world
HELLO_WORLD = $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# This echoes "hello world!"
echo $(HELLO_WORLD)
使用:=类似于使用=。但是,在使用它时,不是在扩展值时,而是在赋值期间扩展它。例如:
HELLO = world
HELLO_WORLD := $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# Still echoes "world world!"
echo $(HELLO_WORLD)
HELLO_WORLD := $(HELLO) world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
使用?=分配一个值的变量当且仅当变量没有被先前分配。如果先前为变量分配了一个空值(VAR=),我认为它仍然被认为是集合。否则,功能完全一样=。
使用+=就像使用一样=,但不是替换值,而是将值附加到当前值,中间有一个空格。如果变量先前已设置:=,我认为它会扩展。我认为,当使用它时,结果值会扩展。例如:
HELLO_WORLD = hello
HELLO_WORLD += world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
如果使用类似的东西HELLO_WORLD = $(HELLO_WORLD) world!,将导致递归,这很可能会结束Makefile的执行。如果A := $(A) $(B)使用了,结果将与使用完全相同,+=因为B扩展了,:=而+=不会导致B扩展。
TA贡献1802条经验 获得超4个赞
我建议你用“make”做一些实验。下面是一个简单的演示,展示之间的差异=和:=。
/* Filename: Makefile*/
x := foo
y := $(x) bar
x := later
a = foo
b = $(a) bar
a = later
test:
@echo x - $(x)
@echo y - $(y)
@echo a - $(a)
@echo b - $(b)
make test 打印:
x - later
y - foo bar
a - later
b - later bar
- 3 回答
- 0 关注
- 609 浏览
添加回答
举报