Mit welchem ​​vordefinierten Makro kann ich Klirren erkennen?

111

Ich versuche, den Compiler zu erkennen, der zum Kompilieren meines Quellcodes verwendet wird. Ich kann leicht vordefinierte Makros finden, um nach MSVC oder GCC zu suchen (siehe zum Beispiel http://predef.sourceforge.net/ ), aber ich kann kein Makro finden, um nach Klirren zu suchen.

Weiß jemand, ob clang ein Makro wie definiert, __CLANG__um zu wissen, was gerade meinen Code kompiliert?

Pierre Bourdon
quelle

Antworten:

120

Verwenden Sie Folgendes, um eine Liste aller vordefinierten Makros zu erhalten, die der Compiler verwendet:

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

Sie können das gleiche für gcc tun.

Chris Suter
quelle
79

Die Antwort mit strings+ gefunden grep:

$ strings /usr/bin/clang | grep __ | grep -i clang
__clang__
Pierre Bourdon
quelle
41

Diese Frage wurde jahrelang beantwortet, aber lassen Sie mich (als zukünftige Referenz) hinzufügen, wie es in Windows gemacht wird :

echo | clang -dM -E -

wie bei GCC:

echo | gcc -dM -E -

Bitte beachten Sie: Der letzte Strich -ist eigentlich wichtig! (Ansonsten bekommst du error: no input filesfür beide Compiler)

Bernd Elkemann
quelle
8
Zu Ihrer Information, Windows-Äquivalent von /dev/nullisNUL:
legalisiere den
@legalize Whoa! Das wusste ich nicht! Das ist ziemlich toll; wo hast du das gefunden
MD XF
4
Es ist seit den DOS-Tagen da, nur die meisten DOS / Windows-Benutzer haben es nie gebraucht.
Legalisieren Sie den
Das mache ich normalerweise auch unter Linux. Tippen /dev/nullist mehr Arbeit.
Peter Cordes