Che cosa significa CC? = In un Makefile dire?
Domanda
Ho un Makefile per un programma C che ha la dichiarazione
CC?=gcc
La modifica a
CC?=g++
non lo rende di compilazione con g ++. La modifica a
CC=g++
fa di esso uso g ++.
Allora mi chiedo che cosa la? = Operatore fa? La mia ipotesi è che si guarda una variabile d'ambiente per decidere quale compilatore da usare e se non è impostato quindi usare gcc? Chiunque può chiarire la situazione?
Soluzione
http://www.gnu.org/software/make/manual /make.html :
C'è un altro operatore di assegnazione per le variabili, `? ='. Questo è chiamato un assegnazione variabile condizionale operatore, perché ha solo effettuare se la variabile non è ancora definito. Questa dichiarazione:
FOO ?= bar
è esattamente equivalente a questo (vedi Il origine Funzione):
ifeq ($(origin FOO), undefined) FOO = bar endif
Probabilmente CC
è già definito come gcc
, quindi CC ?= g++
non ignorare il gcc
esistente.
Altri suggerimenti
L'operatore ?=
imposta la variabile solo se non è già impostato:. info make
? ? * Using Variables
* Setting
Il "?" mezzi operatori impostato se non è già impostato.
Quindi, se CC è già CC vuota? = Si mise. Se CC contiene già qualcosa, non lo farà.
Fonte: http: //unix.derkeiler .com / mailing-list / FreeBSD / domande / 2007-03 / msg02057.html
Come altri hanno detto, è probabile che già predefinito.
In GNU, si può vedere quello che viene definito con make -p
da una directory che non contiene un Makefile
.
Questo è documentato in: https: // www. gnu.org/software/make/manual/html_node/Implicit-Variables.html
Di solito, CC=cc
per impostazione predefinita. Poi su Ubuntu 14.04 per esempio, cc
di solito è un collegamento simbolico a gcc
.
Per disabilitare tutte le variabili in una volta vedere: Disattiva make incorporato regole e variabili dal all'interno del file make Sembra attualmente impossibile.