2012-04-26 17 views
13

sto guardando un CFLAGS di -Cosa fa il flag g ++ -D?

CFLAGS=-g -w -D LINUX -O3 -fpermissive 

in un Makefile. Cosa fa la bandiera -D? Vedo sulla pagina man che

-D name 
    Predefine name as a macro, with definition 1. 

ma non so come interpretarlo. La mia interpretazione è ... rendendo LINUX una macro e facendo solo -03 e -fpermissive in un ambiente Linux. È giusto? Se no, allora cosa? Grazie per qualsiasi aiuto

+3

Spesso, '-D' è incollato al seguente nome (definito), ad es. '-DLINUX' o' -DFOO = BAR' –

risposta

19

È equivalente all'aggiunta della dichiarazione #define LINUX 1 nel codice sorgente del file che si sta compilando. Non ha alcun effetto su altri flag di compilazione. La ragione di questo è che è un modo semplice per abilitare le istruzioni #ifdef nel codice. Così si può avere il codice che dice:

#ifdef LINUX 
    foo; 
#endif 

Sarà abilitato solo se quella macro è abilitato quale è possibile controllare con il flag -D. Quindi è un modo semplice per abilitare/disabilitare le istruzioni di compilazione condizionale in fase di compilazione senza modificare il file sorgente.

+0

Vorrei +1, ma l'interpretazione è corretta solo fino a un certo punto. Il flag '-D' non influisce sui seguenti flag (ad esempio rendendoli condizionali o alcuni di questi pazzi talk), e questa è una distinzione abbastanza importante. – jpm

+0

@jpm è un buon punto che non ho interpretato la domanda in questo modo quando l'ho letto per la prima volta, ma ora vedo che hai ragione. Ho modificato la mia risposta per chiarire questo punto. –

3

Non ha nulla a che fare con -O3. Fondamentalmente, equivale a

#define LINUX 1 

all'inizio del file compilato.

+0

Allora cosa fa -03 allora? – Sterling

+1

'-O3' imposta il livello di ottimizzazione del compilatore su 3. – jpm