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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top