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.
maketrabajo 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 -Wentonces 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.cse ejecute una acción como . Sin embargo, si la variable GCCes decir, se reasigna
GCC=c++a continuación, el ${CC}se convertirá en c++ -Wdespués de la reasignación.
?=La asignación condicional asigna un valor a una variable solo si no tiene un valor
+=Suponga que CC = gccentonces el operador adjunto se usa como CC += -w
entonces CCahora 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.