2010-04-17 13 views
99

Estoy tratando de detectar el compilador utilizado para compilar mi código fuente. Puedo encontrar fácilmente macros predefinidas para comprobar MSVC o GCC (consulte http://predef.sourceforge.net/, por ejemplo), pero no puedo encontrar ninguna macro para comprobar si hay algún sonido metálico.¿Qué macro predefinida puedo usar para detectar clang?

¿Alguien sabe si clang define una macro como __CLANG__ para saber qué está compilando actualmente mi código?

+9

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

+1

[Lista actualizada de macros del compilador] (http://sourceforge.net/p/predef/wiki/ Compiladores /) – chrisaycock

Respuesta

67

encontrado la respuesta usando strings + grep:

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

Para obtener una lista de todas las macros predefinidas que utiliza el compilador, utilice esto:

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

Usted puede hacer lo mismo para gcc .

32

Esta pregunta ha sido contestada por años, pero permítanme añadir (para referencia futura) cómo se hace en de Windows:

echo | clang -dM -E - 

mismo que para GCC:

echo | gcc -dM -E - 

Atención: : ¡El último guión - es realmente importante! (De lo contrario, obtiene error: no input files para ambos compiladores)

+4

FYI, el equivalente de Windows de '/ dev/null' es' NUL: ' – legalize

+0

@legalize Whoa! ¡No lo sabía! Eso es muy bonito; donde encontraste eso? –

+1

Ha estado allí desde los días de DOS, solo la mayoría de los usuarios de DOS/Windows nunca lo necesitaron. – legalize

Cuestiones relacionadas