在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. “+=”
- “+=”和平時寫代碼的理解是一樣的,表示將等號後面的值添加到前面的變量上