El uso =
hace que a la variable se le asigne un valor. Si la variable ya tenía un valor, se reemplaza. Este valor se expandirá cuando se use. Por ejemplo:
HELLO = world
HELLO_WORLD = $(HELLO) world!
# This echoes "world world!"
echo $(HELLO_WORLD)
HELLO = hello
# This echoes "hello world!"
echo $(HELLO_WORLD)
Usar :=
es similar a usar =
. Sin embargo, en lugar de que el valor se expanda cuando se usa, se expande durante la asignación. Por ejemplo:
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)
El uso ?=
asigna a la variable un valor si la variable no se asignó previamente. Si a la variable se le asignó previamente un valor en blanco ( VAR=
), todavía se considera un conjunto , creo . De lo contrario, funciona exactamente como =
.
Usar +=
es como usar =
, pero en lugar de reemplazar el valor, el valor se agrega al actual, con un espacio en el medio. Si la variable se estableció previamente con :=
, creo que se expande . El valor resultante se expande cuando se usa , creo . Por ejemplo:
HELLO_WORLD = hello
HELLO_WORLD += world!
# This echoes "hello world!"
echo $(HELLO_WORLD)
Si HELLO_WORLD = $(HELLO_WORLD) world!
se usara algo así , se produciría una recursión, que probablemente terminaría con la ejecución de su Makefile. Si A := $(A) $(B)
se usaran, el resultado no sería exactamente el mismo que usar +=
porque B
se expande con, :=
mientras +=
que no provocaría B
que se expanda.