Quale macro predefinita posso utilizzare per rilevare il clang?


111

Sto cercando di rilevare il compilatore utilizzato per compilare il mio codice sorgente. Riesco a trovare facilmente macro predefinite per verificare la presenza di MSVC o GCC (vedi http://predef.sourceforge.net/ per esempio), ma non riesco a trovare alcuna macro per verificare il clang.

Qualcuno sa se clang definisce una macro come __CLANG__per sapere cosa sta attualmente compilando il mio codice?



Risposte:


120

Per ottenere un elenco di tutte le macro predefinite utilizzate dal compilatore, utilizzare questo:

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

Puoi fare lo stesso per gcc.


79

Ho trovato la risposta usando strings+ grep:

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

41

Questa domanda ha ricevuto risposta per anni, ma lasciatemi aggiungere (per riferimento futuro) come è fatto in Windows :

echo | clang -dM -E -

come per GCC:

echo | gcc -dM -E -

Nota: l'ultimo trattino -è effettivamente importante! (Altrimenti ottieni error: no input filesper entrambi i compilatori)


8
Cordiali saluti, l'equivalente di Windows /dev/nullèNUL:
legalizza il

@legalize Whoa! Non lo sapevo! È piuttosto interessante; dove l'hai trovato?
MD XF

4
Esiste dai tempi del DOS, solo la maggior parte degli utenti DOS / Windows non ne ha mai avuto bisogno.
legalizza l'

Questo è ciò che di solito faccio anche in Linux. La digitazione /dev/nullè più lavoro.
Peter Cordes
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.