我正在尝试使用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上运行吗?
非常欢迎任何建议,非常感谢您!
答案 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_LANG
或AC_LANG_PUSH
)并使用常规autoconf宏(例如AC_COMPILE_IFELSE
)。但是为输出运行测试程序有一个缺点 - 它在一般情况下打破了交叉编译。
您可能会发现在this macro中查看它们正在做什么是有益的,这是一个C / C ++实现(对于许多编译器),您在Fortran中尝试做的事情(仅适用于gfortran
)。
答案 2 :(得分:0)
gfortran的最新版本支持Fortran 2008标准库例程COMPILER_VERSION()
。在调用此例程之前,您的程序必须具有USE ISO_FORTRAN_ENV
语句。