2012-04-26 13 views
13

estoy mirando un CFLAGS -¿Qué hace la bandera g ++ -D?

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

en un Makefile. ¿Qué hace la bandera -D? Veo en la página de manual que

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

pero no sé cómo interpretar eso. Mi interpretación es ... está haciendo de LINUX una macro y solo haciendo -03 y -permisivo cuando está en un entorno Linux. ¿Está bien? Si no, ¿entonces qué? Gracias por cualquier ayuda

+3

A menudo, el '-D' está pegado al siguiente nombre (definido), p. '-DLINUX' o' -DFOO = BAR' –

Respuesta

19

Es equivalente a agregar la instrucción #define LINUX 1 en el código fuente del archivo que se está compilando. No tiene ningún efecto en otros indicadores de compilación. La razón de esto es que es una manera fácil de habilitar las declaraciones #ifdef en el código. Lo que puede tener código que dice:

#ifdef LINUX 
    foo; 
#endif 

Sólo se habilita si esa macro está activado que se puede controlar con la bandera -D. Por lo tanto, es una manera fácil de habilitar/deshabilitar declaraciones de compilación condicionales en tiempo de compilación sin editar el archivo de origen.

+0

Yo haría +1, pero la interpretación solo es correcta hasta cierto punto. La bandera '-D' no afecta los siguientes indicadores (por ejemplo, hacerlos condicional o algo así como locura), y esa es una distinción bastante importante. – jpm

+0

@jpm ese es un buen punto que no había interpretado la pregunta de esa manera cuando la leí por primera vez, pero ahora veo que estás en lo correcto. Edité mi respuesta para aclarar ese punto. –

3

No tiene nada que ver con -O3. Básicamente, significa lo mismo que

#define LINUX 1 

al principio del archivo compilado.

+0

Entonces, ¿qué significa -03 entonces? – Sterling

+1

'-O3' establece el nivel de optimización del compilador en 3. – jpm

Cuestiones relacionadas