Sid*_*rth 2 kernel makefile linux-kernel
在Linux内核Makefile中是:=和+ =相同,可以互换使用吗?如果没有,那么两者有什么区别?
正如其他人所说,:=
是任务.
但是:=
和之间有一个很好的区别=
.在大多数情况下,这并不重要,但它可能会产生很大的不同.
X = $(Y)
定义X
为递归变量,类似于C预处理器宏.
无论何时X
引用,Y
都将使用值.
扩展时会发生X
扩展.因此,您可以在定义Y
之后进行定义X
,并且没关系.
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)"
Run Code Online (Sandbox Code Playgroud)
它打印
Y = 3 3
Z = 1 2
Run Code Online (Sandbox Code Playgroud)