2012-02-19 23 views
8

con gcc e gfortran posso generare un elenco di macro preprossesor definiti dal compilatore utilizzando (a cura di riflettere la risposta di ouah)Generare elenco di macro del preprocessore definiti dal compilatore

gcc -E -dM - < /dev/null 

e

gfortran -cpp -E -dM /dev/null 

rispettivamente (almeno su Linux).

Come posso fare lo stesso con i compilatori Intel icc e ifort? So che per ifort queste macro sono definite here, ma mi piacerebbe essere in grado di generare da solo questa lista, dal momento che le macro esatte in uso e i loro valori dipenderanno dalle opzioni del compilatore utilizzate. Sono anche a conoscenza del progetto predef.

risposta

3

con il compilatore Intel Fortran, ifort, quanto segue può essere utilizzato:

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

sembra che ifort non dispone di un -dM bandiera equivalente come ICC, gfortran e gcc fare.

+0

Contrassegnare questo come risposta accettata dal momento che mi interessava davvero solo ottenere le direttive del preprocessore usate con ifort (la generalizzazione per includere il compilatore C intel era solo per rendere la domanda più utile). – Chris

+1

'ifort' è sempre il più difficile - quindi grazie per averlo incluso! – patrickvacek

10

Utilizzare questo con il compilatore Intel:

icc -E -dM - < /dev/null 

Si noti che con gcc, l'opzione -E è anche necessario se si desidera utilizzare l'opzione -dM preprocessore.

+0

Grazie per la nota sull'utilizzo dell'opzione '-E' con' gcc' - Ho modificato la mia domanda per includere questo flag. Qualche idea su come fare lo stesso con ifort? – Chris

1

Per gfortran, fare attenzione che gfortran -E -dM - < /dev/null restituisce lo stesso risultato come se si fosse chiamato gcc, che probabilmente non è utile. Probabilmente si desidera qualcosa di simile (source):

gfortran -cpp -E -dM empty.f

che vi darà una lista più piccola di quello che in realtà gfortran predefinisce. Noterai che i risultati molto probabilmente non includono nulla di utile per determinare il sistema operativo. In generale, per Fortran, sei lasciato a definirli da solo. Vedi here per ulteriori dettagli. Si potrebbe anche provare qualcosa come this, ma io sono un po 'scettico sulla pratica di quella soluzione. Inoltre, quel collegamento implica che in una sola volta gfortran ha definito più di quanto non faccia ora.

Problemi correlati