2012-02-19 137 views
8

用gcc和gfortran我可以生成使用編譯器定義preprossesor宏的列表清單(編輯以反映ouah的答案)生成編譯器定義預處理宏

gcc -E -dM - < /dev/null 

gfortran -cpp -E -dM /dev/null 
(至少在Linux上),分別爲

我該怎麼做英特爾編譯器icc和ifort?我知道ifort這些宏被定義爲here,但我希望能夠自己生成這個列表,因爲使用的確切的宏和它們的值將取決於所使用的編譯器選項。我也知道predef項目。

回答

3

隨着英特爾Fortran編譯器,ifort時,可以使用下列:

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

似乎比ifort沒有同等-dM標誌像ICC,gfortran和gcc做。

+0

將此標記爲公認的答案,因爲我確實只關心如何獲取與ifort一起使用的預處理器指令(包含intel C編譯器的泛化只是希望使問題更普遍有用)。 – Chris 2012-06-19 08:25:09

+1

'ifort'總是比較棘手的 - 所以謝謝你包括它! – patrickvacek 2013-09-13 15:15:15

10

使用此與英特爾編譯器:

icc -E -dM - < /dev/null 

注意與gcc,該-E選項也,如果你想使用-dM預處理程序選項必需的。

+0

感謝您對'gcc'使用'-E'選項的說明 - 我編輯了我的問題以包含此標誌。任何關於如何處理ifort的想法? – Chris 2012-02-19 15:11:57

1

對於gfortran,請注意gfortran -E -dM - < /dev/null的結果與您調用gcc時的結果相同,這可能不會有幫助。你可能想是這樣的(source):

gfortran -cpp -E -dM empty.f

這將會給你一個什麼樣gfortran實際上預定義較小的列表。您會注意到結果很可能不包含任何有助於確定操作系統的內容。一般來說,對於Fortran,您需要自己定義這些。有關更多詳細信息,請參見here。你也可以嘗試類似this,但我對這個解決方案的實際操作有點懷疑。此外,該鏈接意味着在一次gfortran定義比現在更多。