:= 和 += 在 Linux Kernel Makefiles 中是否相同并且可以互换使用?如果不是,那么两者有什么区别?
问问题
326 次
4 回答
9
正如其他人所说,:=
是任务。
:=
但是和之间有很好的区别=
。在大多数情况下,这并不重要,但它可能会产生很大的不同。
X = $(Y)
定义X
为递归变量,类似于 C 预处理器宏。
无论何时X
被引用,Y
都会使用 的值。
扩展发生在X
扩展时。所以你定义Y
了之后就可以定义了X
,就OK了。
X := $(Y)
定义X
为一个简单的变量。这更像是一个 C 作业。
现在,Y
在定义时已扩展,因此稍后更改它将无济于事。
X += $(Y)
附加到X
,但保持其类型。
如果X
之前用 定义=
,Y
则不会立即展开。如果X
从未定义,则相同。
如果X
之前用 , 定义:=
,Y
将立即展开。
你可以试试这个例子makefile:
X = 1
Y = $(X)
Z := $(X)
X = 2
Y += $(X)
Z += $(X)
X = 3
test:
@echo "Y = $(Y)"
@echo "Z = $(Z)"
它打印
Y = 3 3
Z = 1 2
于 2012-07-05T07:53:42.480 回答
3
:= 类似于 =, i。e 这是一项任务。
+= 是一个连接和赋值运算符。
例子:
VARIABLE := abc
# here VARIABLE is abc
VARIABLE := def
# VARIABLE is now def only!
VARIABLE_2 = abc
# VARIABLE_2 is now abc
VARIABLE_2 += def
# VARIABLE_2 is abc def
于 2012-07-05T06:50:06.917 回答
0
:=
是赋值。 +=
是串联。见这里。
于 2012-07-05T06:52:16.417 回答
0
:= 清除您要分配的变量的先前值,而 += 添加(连接)到变量
例如,假设 CFLAGS 已设置为 -Wundef
如果我们这样做,
CFLAGS := -Wall
CFLAGS 现在设置为“-Wall”
如果我们这样做,
CFLAGS += -Wall
CFLAGS 现在变为“-Wundef -Wall”
它经常在 Linux Makefiles 中使用。
于 2013-08-02T21:53:41.380 回答