L'uso =
fa sì che alla variabile venga assegnato un valore. Se la variabile aveva già un valore, viene sostituita. Questo valore verrà espanso quando viene utilizzato. Per esempio:
HELLO = world
HELLO_WORLD = $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# This echoes "hello world!"
echo $(HELLO_WORLD)
L'uso :=
è simile all'utilizzo =
. Tuttavia, invece di espandere il valore quando viene utilizzato, viene espanso durante l'assegnazione. Per esempio:
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)
Utilizzando ?=
assegna alla variabile un valore se la variabile non è stata precedentemente assegnata. Se alla variabile era stato precedentemente assegnato un valore vuoto ( VAR=
), è comunque considerato impostato penso . Altrimenti, funziona esattamente come =
.
Usare +=
è come usare =
, ma invece di sostituire il valore, il valore viene aggiunto a quello corrente, con uno spazio in mezzo. Se la variabile è stata precedentemente impostata con :=
, penso che sia espansa . Il valore risultante viene espanso quando viene utilizzato, credo . Per esempio:
HELLO_WORLD = hello
HELLO_WORLD += world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
Se HELLO_WORLD = $(HELLO_WORLD) world!
venisse usato qualcosa di simile , si verificherebbe la ricorsione, che molto probabilmente finirebbe l'esecuzione del tuo Makefile. Se A := $(A) $(B)
fossero usati, il risultato non sarebbe lo stesso dell'uso +=
perché B
è espanso con :=
mentre +=
non causerebbe B
l'espansione.