3 回答

TA貢獻(xiàn)1820條經(jīng)驗 獲得超2個贊
懶集
VARIABLE = value
變量的正常設(shè)置 - 當(dāng)使用變量時,不會在聲明變量時遞歸地擴(kuò)展變量中的值
立即設(shè)定
VARIABLE := value
通過簡單擴(kuò)展內(nèi)部值來設(shè)置變量 - 其中的值在聲明時間擴(kuò)展。
設(shè)置如果缺席
VARIABLE ?= value
僅在變量沒有值時設(shè)置變量
附加
VARIABLE += value
將提供的值附加到現(xiàn)有值(如果變量不存在,則設(shè)置為該值)

TA貢獻(xiàn)1836條經(jīng)驗 獲得超3個贊
使用=會導(dǎo)致為變量賦值。如果變量已有值,則替換它。使用時,該值將被擴(kuò)展。例如:
HELLO = world
HELLO_WORLD = $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# This echoes "hello world!"
echo $(HELLO_WORLD)
使用:=類似于使用=。但是,在使用它時,不是在擴(kuò)展值時,而是在賦值期間擴(kuò)展它。例如:
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)
使用?=分配一個值的變量當(dāng)且僅當(dāng)變量沒有被先前分配。如果先前為變量分配了一個空值(VAR=),我認(rèn)為它仍然被認(rèn)為是集合。否則,功能完全一樣=。
使用+=就像使用一樣=,但不是替換值,而是將值附加到當(dāng)前值,中間有一個空格。如果變量先前已設(shè)置:=,我認(rèn)為它會擴(kuò)展。我認(rèn)為,當(dāng)使用它時,結(jié)果值會擴(kuò)展。例如:
HELLO_WORLD = hello
HELLO_WORLD += world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
如果使用類似的東西HELLO_WORLD = $(HELLO_WORLD) world!,將導(dǎo)致遞歸,這很可能會結(jié)束Makefile的執(zhí)行。如果A := $(A) $(B)使用了,結(jié)果將與使用完全相同,+=因為B擴(kuò)展了,:=而+=不會導(dǎo)致B擴(kuò)展。

TA貢獻(xiàn)1802條經(jīng)驗 獲得超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 打?。?/p>
x - later
y - foo bar
a - later
b - later bar
- 3 回答
- 0 關(guān)注
- 653 瀏覽
添加回答
舉報