Linux 内核 Makefile 中的 := 和 += 是否相同并且可以互换使用?如果不是,那两者有什么区别?
最佳答案
正如其他人所说,:=
是赋值。
但是 :=
和 =
之间有细微差别。在大多数情况下,这无关紧要,但可能会产生很大的不同。
X = $(Y)
将 X
定义为递归变量,类似于 C 预处理器宏。
每当引用 X
时,将使用 Y
的值。
当 X
展开时展开。所以你可以在定义了X
之后再定义Y
,这样就OK了。
X := $(Y)
将 X
定义为一个简单的变量。这更像是一个 C 赋值。
现在,Y
在定义时被扩展,因此稍后更改它不会有任何作用。
X += $(Y)
附加到 X
,但保留其类型。
如果 X
之前用 =
定义,Y
将不会立即展开。如果从未定义 X
,则相同。
如果 X
之前用 :=
定义,Y
将立即展开。
你可以试试这个 exmaple 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
关于makefile - := and += in kernel Makefiles?有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11339110/