makefile - lc_all - locale.error: unsupported locale setting
¿Cuál es la diferencia entre:=y=en Makefile? (3)
Para la asignación de variables en Make (o Microsoft nmake), veo: = y = operador. ¿Cual es la diferencia entre ellos?
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 como gcc -W
, cada vez que se produce ${CC}
se reemplazará con gcc -W
.
Asignación recursiva (=)
Una expresión de asignación recursiva se evalúa cada vez que la variable se encuentra en el código. Por ejemplo, una declaración como CC = ${GCC} {FLAGS}
se evaluará solo cuando se ejecute una acción como ${CC} file.c
Sin embargo, si la variable GCC
se reasigna, es decir, GCC=c++
entonces ${CC}
se convertirá a c++ -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 (+ =)
Supongamos que CC = gcc
entonces el operador que se agrega se usa como CC += -w
entonces CC
ahora tiene el valor gcc -W
De http://www.gnu.org/software/make/manual/make.html#Flavors :
=
define una variable expandida recursivamente :=
define una variable simplemente expandida.
Esto se describe en la documentación de GNU Make, en la sección titulada 6.2 Los dos sabores de las variables .
En resumen, las variables definidas con :=
se expanden una vez, pero las variables definidas con =
se expanden cuando se usan.