如何使用autoconf以可移植的方式查找gfortran版本号?

如何使用autoconf以可移植的方式查找gfortran版本号?,fortran,version,gfortran,portability,autoconf,Fortran,Version,Gfortran,Portability,Autoconf,我正在尝试使用autoconf检查用于编译代码的gfortran版本。如何以便携方式安全获取版本号 最简单的方法是简单地使用gfortran-dumpversion,但我了解到这种方法存在一些问题(例如,在我的机器上,它不返回补丁级别号)。我在文档中找到的选项-dumpfullversion似乎没有实现(我得到一个致命错误) 相反,我尝试使用gfortran--version或gfortran-v。我的第一次尝试如下: GFORTRAN_VERSION=`gfortran -v 2>&am

我正在尝试使用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


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

我不明白您为什么怀疑当前的实现在其他平台上对
gfortran
不起作用。甚至让读者参考GCC文档中的“非Fortran专用”选项(例如
-v
)。对于这样的文档,我希望它与
gcc
非常相似

您应该能够设置自动确认测试(例如
AC\u LANG
AC\u LANG\u PUSH
)并使用常规自动确认宏(例如
AC\u COMPILE\u IFELSE
)。但是为输出运行测试程序有一个缺点——在一般情况下,它会破坏交叉编译


您可能会发现,看看他们在做什么,这是一个C/C++实现(对于许多编译器来说),它是您在Fortran中尝试做的事情(对于
gfortran
)。

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

这是一个很好的建议,但不幸的是,我不能在我正在开发的包中包含这么短的程序。我可以使用你建议的页面上解释的
gfortran-E-dM-
技巧,但是这个解决方案的可移植性如何?(所有系统上都有
/dev/null
文件吗?可能没有)
echo“\uuugnuc\uuuuuuuuu.\uuuugnuc\u MINOR\uuuuuuuuu.\uuuuugnuc\upatchlevel\uuuuuuuuuuuuu”\u124; gfortran-E-cpp-2>/dev/null | tail-n1 | sed-E's///g'
输出5.3.1和gfortran 5.3.1。这意味着需要一些基本的unix工具(这里是tail和sed),并且支持某种管道。我不知道它的可移植性如何,软件的依赖性是什么?我们还可以得到每个值,如
ver=$(echo“\ugnuc”\u124; gfortran-E-P-
等。结合您以前的答案,
ver=$(echo“\ugnuc”\uuuuuuu MINOR.\uuuuuugnuc\uupatchlevel”\u124; gfortran-E-P-\sed's///g')
看起来是一个很有希望的解决方案,假设sed可用(
AC_PROG_sed
可以帮助),并且支持管道。。。谢谢