【问题标题】:What's the macro to distinguish ifort from other fortran compilers?区分 ifort 和其他 fortran 编译器的宏是什么?
【发布时间】:2011-01-31 22:45:39
【问题描述】:

我正在使用必须与各种 Fortran 编译器一起使用的 Fortran 代码(并且正在与 C++ 和 Java 代码交互)。目前,我们让它与 gfortran 和 g95 一起使用,但我正在研究如何让它与 ifort 一起使用,我遇到的第一个问题是弄清楚如何在源代码中确定它是否使用 ifort 或不是。

比如我目前有这段代码:

#if defined(__GFORTRAN__)
// Macro to add name-mangling bits to fortran symbols. Currently for gfortran only
#define MODFUNCNAME(mod,fname) __ ## mod ## _MOD_ ## fname
#else
// Macro to add name-mangling bits to fortran symbols. Currently for g95 only
#define MODFUNCNAME(mod,fname) mod ## _MP_ ## fname
#endif // if __GFORTRAN__

ifort 的宏是什么?我尝试了 IFORT,但这是不对的,进一步的猜测似乎也没有成效。我还尝试使用 ifort -help 和 Google 阅读手册页。

【问题讨论】:

  • 我知道我回答这个问题已经很晚了,但我只是想发布一个关于风格的简短说明:#if defined 子句中的默认情况应该是一个错误,以防止任何意外行为。所以尝试使用类似#if defined(__GFORTRAN__) ... #elif defined(__INTEL_COMPILER) ... #else ... #error "Name-mangling macro not set for your compiler."

标签: preprocessor fortran intel


【解决方案1】:

【讨论】:

  • 谢谢!我还必须将其添加到我的 CMakeLists.txt 文件中的 CMAKE_C_FLAGS 和 CMAKE_SWIG_FLAGS 变量中,以便 C++ 代码创建正确的绑定。
【解决方案2】:

根据他们的文档,他们定义了 __INTEL_COMPILER=910 。 910 可能是一个版本号,但您可能只需要在上面加上#ifdef。

我应该注意,ifort 不允许使用宏,除非您使用 /fpp 标志明确打开它。

【讨论】:

  • 是的,它是一个版本 ID。对于 ifort 版本 11.1,该值为 1110。您还可以使用文件类型“F90”--大写来获取宏/预处理。
  • “文件类型”是指文件的扩展名,还是说编译器标志?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
相关资源
最近更新 更多