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

10
使用gcc和gfortran,我可以通过以下方式生成编译器定义的预处理宏列表(已根据ouah的答案进行编辑)。
gcc -E -dM - < /dev/null

并且

gfortran -cpp -E -dM /dev/null

分别(至少在Linux上)。
我该如何使用Intel编译器icc和ifort做同样的事情?我知道对于ifort,这些宏被定义为here,但我想能够自己生成这个列表,因为使用的确切宏及其值将取决于所使用的编译器选项。我也知道predef项目。
3个回答

11

使用此选项与Intel编译器一起:

icc -E -dM - < /dev/null

请注意,使用 gcc 编译器时,如果要使用 -dM 预处理选项,则还需要使用 -E 选项。


谢谢关于在使用gcc时使用-E选项的提示 - 我已经编辑了我的问题以包括这个标志。有没有关于如何在ifort中做同样事情的想法? - Chris

4
使用英特尔Fortran编译器ifort,可以使用以下命令:
ifort -E -fpp /dev/null -dryrun 2>&1 | grep -e -D | cut -c 5-

看起来ifort没有与icc、gfortran和gcc相同的-dM标志等效。


将此标记为已接受的答案,因为我只关心与ifort一起使用的预处理指令(包括英特尔C编译器在内的泛化只是为了使问题更普遍有用)。 - Chris
1
ifort总是比较棘手的,所以感谢您包含它! - pattivacek

1
对于 gfortran,请注意,gfortran -E -dM - < /dev/null 的结果与调用 gcc 相同,这可能没有什么帮助。你可能需要类似这样的命令 (source):gfortran -cpp -E -dM empty.f ,这将给出一个更小的列表,列出 gfortran 实际预定义的内容。你会注意到,结果很可能不包括任何有助于确定操作系统的内容。一般来说,对于Fortran,你需要自己定义这些内容。有关详细信息,请参见 here。你也可以尝试类似于 this 的解决方案,但我对该解决方案的实际可行性持怀疑态度。另外,那个链接暗示了 gfortran 曾经定义过比现在多的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接