2010-06-03 19 views
22

que tienen un Makefile para un programa C que tiene la declaración¿Qué significa CC? = En un Makefile?

CC?=gcc 

Si lo cambia a

CC?=g++ 

no significa que sea compila con g ++. Cambiando a

CC=g++ 

HACERLO usar g ++.

Me pregunto qué hace el operador? = Supongo que se trata de una variable de entorno para decidir qué compilador usar y si no está configurado, entonces ¿usar gcc? ¿Alguien que puede aclarar esto?

Respuesta

29

De http://www.gnu.org/software/make/manual/make.html:

Hay otro operador de asignación para las variables , `='?. Esto se denomina operador de asignación de variable condicional , porque solo tiene un efecto si la variable aún no está definida . Esta afirmación:

FOO ?= bar 

es exactamente equivalente a esto (vea la función origen):

ifeq ($(origin FOO), undefined) 
    FOO = bar 
endif 

Probablemente CC ya se define como gcc, por lo CC ?= g++ no anulará el gcc existente.

5

El operador ?= establece la variable sólo si no está ya establecido: info make* Using Variables* Setting.

0

Como otros han mencionado, es probable que ya predefinidos.

En GNU, puede ver lo que se define con make -p desde un directorio que no contiene un Makefile.

Esto está documentado en: https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html

Por lo general, CC=cc por defecto. Luego en Ubuntu 14.04 por ejemplo, cc suele ser un enlace simbólico a gcc.

Para deshabilitar todas las variables a la vez ver: Disable make builtin rules and variables from inside the make file Parece imposible.