题
现代Fortran提供了一些跨平台机制来记录用于构建应用程序的编译器版本和设置. C 17有哪些方法可以捕获这些信息? Horton和Van Weert的书,Beginning C++17,似乎没有解决这个问题.
Fortran工具在下面进行了调查.
1.访问编译器版本和选项
Fortran中的iso_fortran_env提供了访问编译器版本和用于编译代码的设置的标准方法.随后是一个示例代码段.
代码示例
program check_compiler
use, intrinsic :: iso_fortran_env, only : compiler_options, compiler_version
implicit none
write ( *, 100 ) "compiler version = ", compiler_version ()
write ( *, 100 ) "compiler options = ", trim ( compiler_options () )
100 format ( A, A, / )
stop "normal termination . . ."
end program check_compiler
样本输出
$gfortran -o check_compiler check_compiler.f08
$./check_compiler
compiler version = GCC version 8.0.0 20170604 (experimental)
compiler options = -fPIC -mmacosx-version-min=10.12.7 -mtune=core2
STOP normal termination . . .
2.探测主机操作系统并与之交互
诸如execute_command_line,get_command和get_environment_variable之类的Fortran命令提供了另一条在编译时记录信息的路径.
解决方法:
搜索C++20 standard draft, which is available in GitHub,我找到no results用于密切定位的“编译器”和“版本”,我也没有找到类似这样的标准文本.
C 20此时仍然非常接近C 17,当然这种机制还没有被删除,所以我认为在C 20中没有这样的东西是非常安全的.