2010-04-17 13 views
99

Próbuję wykryć kompilator używany do kompilacji mojego kodu źródłowego. Mogę łatwo znaleźć predefiniowane makra, aby sprawdzić MSVC lub GCC (zobacz na przykład http://predef.sourceforge.net/), ale nie mogę znaleźć żadnego makra, aby sprawdzić clang.Jakie predefiniowane makro można użyć do wykrywania klang?

Czy ktoś wie, czy clang definiuje makro takie jak __CLANG__, aby wiedzieć, co aktualnie kompiluje mój kod?

+9

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

+1

[Zaktualizowana lista makr kompilatora] (http://sourceforge.net/p/predef/wiki/ Kompilatory /) – chrisaycock

Odpowiedz

67

znaleźć odpowiedź korzystając strings + grep:

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

Aby uzyskać listę wszystkich predefiniowanych makr, że kompilator używa użyj:

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

Można zrobić to samo dla gcc .

32

To pytanie zostało odebrane przez lata, ale dodam (na przyszłość), jak to się robi w systemu Windows:

echo | clang -dM -E - 

same jak dla GCC:

echo | gcc -dM -E - 

proszę zauważyć, : Ostatnia kreska - jest rzeczywiście ważna! (W przeciwnym razie otrzymasz error: no input files dla obu kompilatorów)

+4

FYI, odpowiednikiem Windows '/ dev/null' jest' NUL: ' – legalize

+0

@legalize Whoa! Nie wiedziałem tego! To fajnie; gdzie to znalazłeś? –

+1

Jest tam od czasów DOS, większość użytkowników DOS/Windows nigdy tego nie potrzebowała. – legalize

Powiązane problemy