如何使用autoconf以便携方式查找gfortran版本号?

时间:2017-02-11 12:44:53

标签: fortran version gfortran portability autoconf

我正在尝试使用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上运行吗?

非常欢迎任何建议,非常感谢您!

3 个答案:

答案 0 :(得分:2)

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

program p
  implicit none

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

请参阅What are the gcc predefined macros for the compiler's version number?

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

答案 1 :(得分:0)

我不明白为什么你怀疑你当前的实现在其他平台上对gfortran不起作用。 This page甚至将读者引用到GCC文档中,以及非特定于Fortran的"选项(例如-v)。有了这样的文档,我希望它与gcc非常相似。

您应该可以设置autoconf测试(例如AC_LANGAC_LANG_PUSH)并使用常规autoconf宏(例如AC_COMPILE_IFELSE)。但是为输出运行测试程序有一个缺点 - 它在一般情况下打破了交叉编译。

您可能会发现在this macro中查看它们正在做什么是有益的,这是一个C / C ++实现(对于许多编译器),您在Fortran中尝试做的事情(仅适用于gfortran )。

答案 2 :(得分:0)

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