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
make
trabajo 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 -W
entonces 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.c
se ejecute una acción como . Sin embargo, si la variableGCC
es decir, se reasignaGCC=c++
a continuación, el${CC}
se convertirá enc++ -W
despué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 = gcc
entonces el operador adjunto se usa comoCC += -w
entonces
CC
ahora tiene el valorgcc -W
Para 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