gcc - ejecutar - ¿Qué significa CC?=En un Makefile significa?
gcc linux (4)
Tengo un Makefile para un programa de 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 ++.
Así que me pregunto qué hace el operador? =? Mi conjetura es que mira una variable de entorno para decidir qué compilador usar y si no está configurado, ¿usar gcc? ¿Alguien que pueda aclarar esto?
Como han mencionado otros, es probable que ya esté predefinido.
En GNU, puede ver lo que está definido con make -p
desde un directorio que no contiene un Makefile
.
Esto se documenta 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, vea: Deshabilitar las reglas y variables integradas desde dentro del archivo de creación Parece actualmente imposible.
Desde http://www.gnu.org/software/make/manual/make.html :
Hay otro operador de asignación para variables, `? = ''. Esto se denomina operador de asignación de variables condicionales, porque solo tiene 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
, por lo que CC ?= g++
no reemplazará el gcc
existente.
El operador ?=
Establece la variable solo si aún no está establecida: info make
→ * Using Variables
→ * Setting
.
Los "?" operador significa establecer si no está ya establecido.
Entonces, si CC ya está en blanco, CC? = Lo configurará. Si CC ya contiene algo, no lo hará.
Fuente: http://unix.derkeiler.com/Mailing-Lists/FreeBSD/questions/2007-03/msg02057.html