makefile中的 赋值如何表示呢?

在下面的源码中,?= 表示什么意思呢?

makefile中的 赋值如何表示呢?_第1张图片

参考博客:
https://blog.csdn.net/b876144622/article/details/80372161

1、“=” 表示什么意思?

“=”是最普通的等号,
然而在Makefile中确实最容易搞错的赋值等号,
使用”=”进行赋值,变量的值是整个makefile中最后被指定的值。
不太容易理解,举个例子如下:

VIR_A = A
VIR_B = $(VIR_A) B
VIR_A = AA

经过上面的赋值后,最后VIR_B的值是AA B,而不是A B。
在make时,会把整个makefile展开,拉通决定变量的值

2、":=" 表示什么意思呢?

相比于前面“最普通”的”=”,”:=”就容易理解多了。
”:=”就表示直接赋值,赋予当前位置的值。
同样举个例子说明:

VIR_A := A
VIR_B := $(VIR_A) B
VIR_A := AA

最后变量VIR_B的值是A B,即根据当前位置进行赋值。
因此相比于”=”,”:=”才是真正意义上的直接赋值。

3、"?=" 表示什么意思呢?

“?=”表示如果该变量没有被赋值,则赋予等号后的值。
举例:

VIR ?= new_value

如果VIR在之前没有被赋值,那么VIR的值就为new_value.

VIR := old_value
VIR ?= new_value

这种情况下,VIR的值就是old_value

4、“+=”表示什么意思呢?

“+=” 跟平时写代码的理解是一样的,
表示将等号后面的值添加到前面的变量上

你可能感兴趣的:(makefile中的 赋值如何表示呢?)