2012-02-19 15 views
8

gcc i gfortran mogę wygenerować listę makr preprossesor zdefiniowanych przez kompilator używając Generowanie (edytowane w celu odzwierciedlenia odpowiedź ouah za)listę makr preprocesora zdefiniowanych przez kompilator

gcc -E -dM - < /dev/null 

i

gfortran -cpp -E -dM /dev/null 

odpowiednio (przynajmniej w systemie Linux).

Jak mogę zrobić to samo z kompilatorami Intel icc i ifort? Wiem, że dla ifort te makra są zdefiniowane here, ale chciałbym móc wygenerować tę listę samodzielnie, ponieważ dokładne używane makra i ich wartości będą zależeć od użytych opcji kompilatora. Jestem również świadomy projektu predef.

Odpowiedz

3

z kompilatora Intel Fortran ifort dodaje można stosować:

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

Wydaje niż ifort nie mają równoważną -dM flagę jak MTK, gfortran i gcc zrobić.

+0

Oznaczenie to jako zaakceptowanej odpowiedzi, ponieważ naprawdę interesowałem się tylko uzyskaniem dyrektyw preprocesora używanych w ifort (uogólnienie w celu włączenia kompilatora intel C było tylko po to, by sprawić, że pytanie będzie bardziej ogólnie użyteczne). – Chris

+1

'ifort' jest zawsze trudniejsze - dzięki za to! – patrickvacek

10

Użyj tego z kompilatora Intel:

icc -E -dM - < /dev/null 

Należy zauważyć, że z gcc opcja -E jest również wymagane, jeśli chcesz korzystać z opcji -dM preprocesora.

+0

Dzięki za notatkę dotyczącą używania opcji '-E' z' gcc' - Zmieniłem moje pytanie, aby dołączyć tę flagę. Wszelkie pomysły na to samo z ifort? – Chris

1

Dla gfortran, należy pamiętać, że gfortran -E -dM - < /dev/null daje taki sam wynik, jak gdybyś zadzwonił pod numer gcc, co prawdopodobnie nie jest pomocne. Prawdopodobnie chcesz coś takiego (source):

gfortran -cpp -E -dM empty.f

który daje mniejszą listę co gfortran faktycznie predefiniuje. Zauważysz, że wyniki najprawdopodobniej nie zawierają niczego przydatnego do określenia systemu operacyjnego. Ogólnie rzecz biorąc, w przypadku gry Fortran, możesz sam je zdefiniować. Aby uzyskać dodatkowe informacje, patrz here. Możesz także wypróbować coś takiego jak this, ale jestem trochę sceptyczny co do praktycznie tego rozwiązania. Ponadto ten link oznacza, że ​​w pewnym momencie gfortran zdefiniowane więcej niż teraz.

Powiązane problemy