warning unsupported lc_all failed error en_us makefile gnu-make nmake colon-equals

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



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.