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 Bse expande con, :=mientras +=que no provocaría Bque se expanda.