Para la asignación de variables en Make, veo: = y = operador. ¿Cual es la diferencia entre ellos?
Para la asignación de variables en Make, veo: = y = operador. ¿Cual es la diferencia entre ellos?
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.
make
trabajo principal de the ) tiene una sobrecarga mucho mayor que la resolución de la variable interna.
:=
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 por gcc -W
.
=
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 variable GCC
es decir, se reasigna
GCC=c++
a continuación, el ${CC}
se convertirá en c++ -W
después de la reasignación.
?=
La asignación condicional asigna un valor a una variable solo si no tiene un valor
+=
Suponga que CC = gcc
entonces el operador adjunto se usa como CC += -w
entonces CC
ahora tiene el valorgcc -W
Para obtener más información, consulte estos tutoriales.
De http://www.gnu.org/software/make/manual/make.html#Flavors :
=
define una variable expandida de forma recursiva. :=
define una variable simplemente expandida.