【问题标题】:Generate list of preprocessor macros defined by the compiler生成编译器定义的预处理器宏列表
【发布时间】:2015-01-30 16:30:35
【问题描述】:

使用 gcc 和 gfortran,我可以生成一个由编译器定义的预处理器宏列表(经过编辑以反映 ouah 的回答)

gcc -E -dM - < /dev/null

gfortran -cpp -E -dM /dev/null

分别(至少在 Linux 上)。

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

【问题讨论】:

    标签: c fortran preprocessor icc intel-fortran


    【解决方案1】:

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

    icc -E -dM - < /dev/null
    

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

    【讨论】:

    • 感谢您提供有关使用 -E 选项和 gcc 的说明 - 我已编辑我的问题以包含此标志。对 ifort 做同样的事情有什么想法吗?
    【解决方案2】:

    使用英特尔 Fortran 编译器 ifort,可以使用以下内容:

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

    似乎 ifort 没有像 icc、gfortran 和 gcc 那样的等效 -dM 标志。

    【讨论】:

    • 将此标记为已接受的答案,因为我真的只关心获取与 ifort 一起使用的预处理器指令(包括 intel C 编译器的概括只是希望使问题更普遍有用)。跨度>
    • ifort 总是比较棘手 - 所以感谢您提供它!
    【解决方案3】:

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

    gfortran -cpp -E -dM empty.f

    这将为您提供gfortran 实际预定义的较小列表。您会注意到,结果很可能不包括任何有助于确定操作系统的内容。通常,对于 Fortran,您可以自己定义这些。有关更多详细信息,请参阅here。您也可以尝试this 之类的方法,但我对该解决方案的实用性有点怀疑。此外,该链接暗示 gfortran 的定义比现在更多。

    【讨论】:

      猜你喜欢
      • 2011-07-30
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 2010-10-17
      相关资源
      最近更新 更多