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

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

  • “+=”和平時寫代碼的理解是一樣的,表示將等號後面的值添加到前面的變量上
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章