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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top