Makefile中:=, =, ?=和+=的含義
阿新 • • 發佈:2020-12-05
本文轉載自: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. “+=”
“+=”和平時寫程式碼的理解是一樣的,表示將等號後面的值新增到前面的變數上