2012-02-19 16 views
8

Con gcc y gfortran que puedo generar una lista de macros preprossesor definidas por el compilador utilizando Generar (editada para reflejar la respuesta de ouah)lista de macros del preprocesador definidas por el compilador

gcc -E -dM - < /dev/null 

y

gfortran -cpp -E -dM /dev/null 

respectivamente (en Linux al menos).

¿Cómo puedo hacer lo mismo con los compiladores de Intel icc e ifort? Sé que para ifort estas macros están definidas como here, pero me gustaría poder generar esta lista yo mismo, ya que las macros exactas en uso y sus valores dependerán de las opciones de compilación utilizadas. También conozco el proyecto predef.

Respuesta

3

Con el compilador Intel Fortran, ifort, la siguiente se puede utilizar:

ifort -E -fpp /dev/null -dryrun 2>&1 | grep -e -D | cut -c 5- 

Parece que ifort no tiene un equivalente -dM bandera como ICC, gfortran y gcc hacer.

+0

Marcando esto como la respuesta aceptada ya que realmente solo me preocupaba obtener las directivas de preprocesador usadas con ifort (la generalización para incluir el compilador de intel C era solo para hacer que la pregunta fuera más útil en general). – Chris

+1

'ifort' es siempre el más complicado, ¡así que gracias por incluirlo! – patrickvacek

10

utilizar esto con el compilador Intel:

icc -E -dM - < /dev/null 

Tenga en cuenta que con gcc, la opción -E también es necesario si desea utilizar la opción -dM preprocesador.

+0

Gracias por la nota sobre el uso de la opción ''E' con' gcc' - He editado mi pregunta para incluir esta marca. ¿Alguna idea de hacer lo mismo con ifort? – Chris

1

Para gfortran, tenga en cuenta que gfortran -E -dM - < /dev/null produce el mismo resultado que si hubiera llamado gcc, que probablemente no sea útil. Es posible que desee algo como esto (source):

gfortran -cpp -E -dM empty.f

que le dará una lista más pequeña de lo que realmente permite predefinir gfortran. Notará que los resultados probablemente no incluyen nada útil para determinar el sistema operativo. En general, para Fortran, te deja definirlos tú mismo. Ver here para detalles adicionales. También podría intentar algo como this, pero soy un poco escéptico de la práctica de esa solución. Además, ese enlace implica que al mismo tiempo gfortran definió más de lo que lo hace ahora.

Cuestiones relacionadas