2010-04-17 12 views
99

J'essaie de détecter le compilateur utilisé pour compiler mon code source. Je peux facilement trouver des macros prédéfinies pour vérifier MSVC ou GCC (voir http://predef.sourceforge.net/ par exemple), mais je ne trouve aucune macro pour vérifier clang.Quelle macro prédéfinie puis-je utiliser pour détecter clang?

Est-ce que quelqu'un sait si clang définit une macro comme __CLANG__ afin de savoir ce qui compile actuellement mon code?

+9

http://predef.sourceforge.net/precomp.html#sec4 – Yktula

+1

[Liste mise à jour des macros du compilateur] (http://sourceforge.net/p/predef/wiki/ Compilateurs /) – chrisaycock

Répondre

67

a trouvé la réponse à l'aide strings + grep:

$ strings /usr/bin/clang | grep __ | grep -i clang 
__clang__ 
105

Pour obtenir une liste de toutes les macros prédéfinies que le compilateur utilise, utilisez ceci:

clang -dM -E -x c /dev/null 

Vous pouvez faire la même chose pour gcc .

32

Cette question a été répondue depuis des années, mais permettez-moi d'ajouter (pour référence ultérieure) comment il se fait dans de Windows:

echo | clang -dM -E - 

même que pour GCC:

echo | gcc -dM -E - 

S'il vous plaît noter : Le dernier tiret - est réellement important! (Sinon, vous obtenez error: no input files pour les deux compilateurs)

+4

FYI, Windows équivalent de '/ dev/null' est' NUL: ' – legalize

+0

@legalize Whoa! Je ne le savais pas! C'est plutôt cool; où as-tu trouvé ça? –

+1

Il a été là depuis les jours DOS, la plupart des utilisateurs DOS/Windows n'en ont jamais eu besoin. – legalize