2012-02-19 135 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定义比现在更多。