Para la asignación de variables en Make, veo: = y = operador. ¿Cual es la diferencia entre ellos?
makefile
gnu-make
colon-equals
prosseek
fuente
fuente

Respuestas:
Esto se describe en la documentación de GNU Make, en la sección titulada 6.2 Los dos tipos de variables .
En resumen, las variables definidas con
:=se expanden una vez, pero las variables definidas con=se expanden siempre que se utilizan.fuente
maketrabajo principal de the ) tiene una sobrecarga mucho mayor que la resolución de la variable interna.Asignación simple
:=Una expresión de asignación simple se evalúa solo una vez, en la primera aparición. Por ejemplo, si
CC :=${GCC} ${FLAGS}durante el primer encuentro se evalúa a,gcc -Wentonces cada vez que${CC}ocurra será reemplazado porgcc -W.Asignación recursiva
=Una expresión de asignación recursiva se evalúa cada vez que se encuentra la variable en el código. Por ejemplo, una instrucción como
CC = ${GCC} {FLAGS}se evaluará solo cuando${CC} file.cse ejecute una acción como . Sin embargo, si la variableGCCes decir, se reasignaGCC=c++a continuación, el${CC}se convertirá enc++ -Wdespués de la reasignación.Asignación condicional
?=La asignación condicional asigna un valor a una variable solo si no tiene un valor
Anexando
+=Suponga que
CC = gccentonces el operador adjunto se usa comoCC += -wentonces
CCahora tiene el valorgcc -WPara obtener más información, consulte estos tutoriales.
fuente
De http://www.gnu.org/software/make/manual/make.html#Flavors :
=define una variable expandida de forma recursiva.:=define una variable simplemente expandida.fuente