如何使用自动协商以可移植的方式查找 gfortran 版本号



我正在尝试使用 autoconf 来检查用于编译代码的 gfortran 版本。如何以可移植的方式安全地获取版本号?

最简单的方法是简单地使用 gfortran -dumpversion ,但我读到这种方法存在一些问题(例如,在我的机器上,它不返回补丁级别编号(。我在文档中找到的选项似乎没有实现-dumpfullversion(我收到一个致命错误(。

相反,我正在尝试使用gfortran --versiongfortran -v。我的第一个尝试如下:

GFORTRAN_VERSION=`gfortran -v 2>&1 | $AWK 'END { print }' | $AWK '{ print $3 }'`

其中$AWK包含 AC_PROG_AWK 找到的 awk 类型程序。它在我测试过的所有 Linux 机器上都能完美运行。但是,假设 gfortran -v 将始终在其输出的最后一行的第三个位置返回版本号似乎不合理。例如,这种方法在MacOS或Windows上是否有效?

任何建议将非常受欢迎,提前非常感谢!

您可以编写一个简短的程序,该程序将使用预处理器定义,如下所示

program p
  implicit none
  write(*,*) __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__
end program p

请参阅编译器版本号的 gcc 预定义宏是什么?

如果您愿意,可以自定义格式。

我不明白为什么您怀疑您当前的实现不适用于其他平台上的gfortran。 此页面甚至将读者引向 GCC 文档以获取"非 Fortran 特定"选项(例如 -v(。 有了这样的文档,我希望它与gcc非常相似。

您应该能够设置自动确认测试(例如 AC_LANGAC_LANG_PUSH (并使用常规的自动通信宏(例如 AC_COMPILE_IFELSE (。 但是运行一个用于输出的测试程序有一个缺点——在一般情况下,它会破坏交叉编译。

您可能会发现查看他们在此宏中正在做什么很有启发性,该宏是您在 Fortran 中尝试执行的操作的 C/C++ 实现(对于许多编译器((仅gfortran(。

最新版本的

gfortran 支持 Fortran 2008 标准库例程COMPILER_VERSION()。 在调用此例程之前,程序必须具有 USE ISO_FORTRAN_ENV 语句。

相关内容

  • 没有找到相关文章

最新更新