2012-04-26 1 views
13

Je cherche à CFLAGS de -Que fait le drapeau g ++ -D?

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

dans un Makefile. Que fait le drapeau -D? Je vois sur la page de manuel que

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

mais je ne sais pas interpréter cela. Mon interprétation est ... de faire de Linux une macro et de ne faire que -03 et -fpermissive dans un environnement Linux. Est-ce correct? Si non, alors quoi? Merci pour toute aide

+3

Souvent, le «-D» est collé au nom (défini) suivant, par ex. '-DLINUX' ou' -DFOO = BAR' –

Répondre

19

Cela équivaut à ajouter l'instruction #define LINUX 1 dans le code source du fichier en cours de compilation. Cela n'a aucun effet sur les autres drapeaux de compilation. La raison en est que c'est un moyen facile d'activer les instructions #ifdef dans le code. Ainsi, vous pouvez avoir du code qui dit:

#ifdef LINUX 
    foo; 
#endif 

Il ne sera activé que si cette macro est activé que vous pouvez contrôler avec le drapeau -D. C'est donc un moyen facile d'activer/désactiver les instructions de compilation conditionnelles au moment de la compilation sans modifier le fichier source.

+0

Je voudrais +1, mais l'interprétation n'est correcte que jusqu'à un certain point. L'indicateur '-D' n'affecte pas les drapeaux suivants (par exemple en les rendant conditionnels ou en parlant un peu fou), et c'est une distinction assez importante. – jpm

+0

@jpm c'est un bon point que je n'avais pas interprété la question de cette façon quand je l'ai lu pour la première fois, mais maintenant je vois que vous avez raison. J'ai édité ma réponse pour clarifier ce point. –

3

Cela n'a rien à voir avec -O3. Fondamentalement, cela signifie le même que

#define LINUX 1 

au début du fichier compilé.

+0

Alors qu'est-ce que -03 alors? – Sterling

+1

'-O3' définit le niveau d'optimisation du compilateur à 3. – jpm

Questions connexes