makefile - := and += in kernel Makefiles?有什么区别

标签 makefile linux-kernel kernel

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/

相关文章:

linux - Linux 设备驱动程序开发书籍/教程/视频讲座

c - Linux USB编程

linux - 如何在 Linux UEFI 中使用 memmap 内核选项启动?

makefile - 调试Makefile

c - 链接器选项,路径总和太长?

linux - 有没有办法在 bash 脚本中遍历 Makefile 目标?

linux - 如何使用 spi-loopback-test linux 内核模块?

linux - Linux 内核中 wait_event 和 wake_up 之间的竞争条件

linux - 接收不需要的多播流量的应用程序

c - 包括PJSIP-Library并编写makefile