我正在尝试使用 autoconf 来检查用于编译代码的 gfortran 版本。如何以可移植的方式安全地获取版本号?
最简单的方法是简单地使用 gfortran -dumpversion
,但我读到这种方法存在一些问题(例如,在我的机器上,它不返回补丁级别编号(。我在文档中找到的选项似乎没有实现-dumpfullversion
(我收到一个致命错误(。
相反,我正在尝试使用gfortran --version
或gfortran -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_LANG
或 AC_LANG_PUSH
(并使用常规的自动通信宏(例如 AC_COMPILE_IFELSE
(。 但是运行一个用于输出的测试程序有一个缺点——在一般情况下,它会破坏交叉编译。
您可能会发现查看他们在此宏中正在做什么很有启发性,该宏是您在 Fortran 中尝试执行的操作的 C/C++ 实现(对于许多编译器((仅gfortran
(。
gfortran 支持 Fortran 2008 标准库例程COMPILER_VERSION()
。 在调用此例程之前,程序必须具有 USE ISO_FORTRAN_ENV
语句。