生成编译器定义的预处理器宏列表

时间:2012-02-19 13:51:00

标签: c fortran preprocessor icc intel-fortran

使用gcc和gfortran我可以生成编译器定义的预处理器宏列表(编辑以反映ouah的答案)

gcc -E -dM - < /dev/null

gfortran -cpp -E -dM /dev/null

分别(至少在Linux上)。

我如何对英特尔编译器icc和ifort做同样的事情?我知道对于ifort这些宏是定义here,但我希望能够自己生成这个列表,因为使用的确切宏及其值将取决于所使用的编译器选项。我也知道predef项目。

3 个答案:

答案 0 :(得分:11)

与英特尔编译器一起使用:

icc -E -dM - < /dev/null

请注意,对于gcc,如果要使用-E预处理器选项,还需要-dM选项。

答案 1 :(得分:3)

使用英特尔Fortran编译器ifort,可以使用以下命令:

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

似乎比ifort没有像icc,gfortran和gcc这样的等效-dM标志。

答案 2 :(得分:1)

对于gfortran,请注意gfortran -E -dM - < /dev/null产生与调用gcc相同的结果,这可能不会有帮助。你可能想要这样的东西(source):

gfortran -cpp -E -dM empty.f

这将为您提供一个较小的gfortran实际预定义列表。您会注意到结果很可能不包括任何有助于确定操作系统的内容。通常,对于Fortran,您可以自己定义它们。有关其他详细信息,请参阅here。您也可以尝试类似this的内容,但我对该解决方案的实际情况持怀疑态度。此外,该链接意味着,gfortran定义的时间比现在更多。