Clang'ı tespit etmek için önceden tanımlanmış hangi makroyu kullanabilirim?


111

Kaynak kodumu derlemek için kullanılan derleyiciyi bulmaya çalışıyorum. MSVC veya GCC'yi kontrol etmek için önceden tanımlanmış makroları kolayca bulabilirim ( örneğin bkz. Http://predef.sourceforge.net/ ), ancak clang'ı kontrol edecek herhangi bir makro bulamıyorum.

Birisi clang'ın __CLANG__şu anda kodumu neyin derlediğini bilmek için olduğu gibi bir makro tanımlayıp tanımlamadığını biliyor mu?



Yanıtlar:


121

Derleyicinin kullandığı tüm önceden tanımlanmış makroların bir listesini almak için şunu kullanın:

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

Aynı şeyi gcc için de yapabilirsiniz.


79

Cevabı strings+ kullanarak buldum grep:

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

41

Bu soru yıllardır cevaplandı, ancak Windows'ta nasıl yapıldığını (ileride başvurmak için) eklememe izin verin :

echo | clang -dM -E -

GCC ile aynı:

echo | gcc -dM -E -

Lütfen unutmayın: Son çizgi -gerçekten önemlidir! (Aksi takdirde error: no input filesher iki derleyici için de alırsınız )


8
Bilginize, Windows eşdeğer /dev/nullolduğunuNUL:
Legalize

@legalize Whoa! Bunu bilmiyordum! Bu oldukça havalı; bunu nereden buldun?
MD XF

4
DOS günlerinden beri oradaydı, sadece çoğu DOS / Windows kullanıcısı buna hiç ihtiyaç duymadı.
yasallaştır

Linux'ta da genellikle yaptığım şey bu. Yazmak /dev/nulldaha fazla iştir.
Peter Cordes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.