1. 程式人生 > 實用技巧 >Makefile中:=, =, ?=和+=的含義

Makefile中:=, =, ?=和+=的含義

本文轉載自:https://blog.csdn.net/b876144622/article/details/80372161

在Makefile語法中,時不時會見到各種“=”號的賦值語句,除了常見的“=”和“:=”,還有“?=”等

那麼這些賦值等號分別表示什麼含義呢?

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. “+=”

“+=”和平時寫程式碼的理解是一樣的,表示將等號後面的值新增到前面的變數上