3 回答
TA貢獻1820條經驗 獲得超3個贊
懶集
VARIABLE = value
變量的正常設置 - 當使用變量時,不會在聲明變量時遞歸地擴展變量中的值
立即設定
VARIABLE := value
通過簡單擴展內部值來設置變量 - 其中的值在聲明時間擴展。
設置如果缺席
VARIABLE ?= value
僅在變量沒有值時設置變量
附加
VARIABLE += value
將提供的值附加到現有值(如果變量不存在,則設置為該值)
TA貢獻1836條經驗 獲得超3個贊
使用=會導致為變量賦值。如果變量已有值,則替換它。使用時,該值將被擴展。例如:
HELLO = world
HELLO_WORLD = $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# This echoes "hello world!"
echo $(HELLO_WORLD)
使用:=類似于使用=。但是,在使用它時,不是在擴展值時,而是在賦值期間擴展它。例如:
HELLO = world
HELLO_WORLD := $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# Still echoes "world world!"
echo $(HELLO_WORLD)
HELLO_WORLD := $(HELLO) world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
使用?=分配一個值的變量當且僅當變量沒有被先前分配。如果先前為變量分配了一個空值(VAR=),我認為它仍然被認為是集合。否則,功能完全一樣=。
使用+=就像使用一樣=,但不是替換值,而是將值附加到當前值,中間有一個空格。如果變量先前已設置:=,我認為它會擴展。我認為,當使用它時,結果值會擴展。例如:
HELLO_WORLD = hello
HELLO_WORLD += world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
如果使用類似的東西HELLO_WORLD = $(HELLO_WORLD) world!,將導致遞歸,這很可能會結束Makefile的執行。如果A := $(A) $(B)使用了,結果將與使用完全相同,+=因為B擴展了,:=而+=不會導致B擴展。
TA貢獻1802條經驗 獲得超4個贊
我建議你用“make”做一些實驗。下面是一個簡單的演示,展示之間的差異=和:=。
/* Filename: Makefile*/
x := foo
y := $(x) bar
x := later
a = foo
b = $(a) bar
a = later
test:
@echo x - $(x)
@echo y - $(y)
@echo a - $(a)
@echo b - $(b)
make test 打印:
x - later
y - foo bar
a - later
b - later bar
- 3 回答
- 0 關注
- 673 瀏覽
添加回答
舉報
