¿Qué significa CC? = En un archivo de making?
Pregunta
Tengo un juego de making para un programa C que tiene la declaración
CC?=gcc
Cambiándolo a
CC?=g++
no lo hace compilar con G ++. Cambiándolo a
CC=g++
Hace que use g ++.
Entonces me pregunto qué hace el operador? =? Supongo que analiza una variable de entorno para decidir qué compilador usar y si no está configurado, ¿usa GCC? ¿Alguien que pueda aclarar esto?
Solución
De http://www.gnu.org/software/make/manual/make.html:
Hay otro operador de asignación para variables, `? = '. Esto se llama operador de asignación de variable condicional, porque solo tiene un efecto si la variable aún no está definida. Esta declaración:
FOO ?= bar
es exactamente equivalente a esto (ver la función de origen):
ifeq ($(origin FOO), undefined) FOO = bar endif
Probablemente CC
ya está definido como gcc
, asi que CC ?= g++
no anulará el existente gcc
.
Otros consejos
los ?=
El operador establece la variable solo si no está configurado: info make
→ * Using Variables
→ * Setting
.
Los "?" Operador significa establecido si ya no está configurado.
Entonces, si CC ya está en blanco CC? = Lo establecerá. Si CC ya contiene algo, no lo hará.
Fuente: http://unix.derkeiler.com/mailing-lists/freebsd/questions/2007-03/msg02057.html
Como otros mencionaron, es probable que ya esté predefinido.
En GNU, puedes ver lo que se define con make -p
de un directorio que no contiene un Makefile
.
Esto está documentado en: https://www.gnu.org/software/make/manual/html_node/implticit-variables.html
Normalmente, CC=cc
por defecto. Luego en Ubuntu 14.04 para EG, cc
suele ser un enlace simbólico para gcc
.
Para deshabilitar todas las variables a la vez vea: Deshabilitar hacer reglas y variables de creación desde el interior del archivo make Parece actualmente imposible.