3

Fortran 2008 添加了一个名为 COMPILER_OPTIONS() 的新过程,根据GNU 文档,它应该返回一个带有用于编译文件的选项的字符串。根据Fortran 2003 status wiki,包括 GNU 和 PGI 在内的几乎所有编译器似乎都支持此功能。

我创建了一个COMPILER_OPTIONS.f08如下所示的简单程序

use iso_fortran_env
   print '(4a)', 'This file was compiled by using the options ', compiler_options()
end

这是我的gfortran结果pgfortran

没有编译时选项的 Gfortran 5.4

$ gfortran COMPILER_OPTIONS.f08 && ./a.out 
This file was compiled by using the options -mtune=generic -march=x86-64

编译时通过 -O3 的 Gfortran 5.4

$ gfortran -O3 COMPILER_OPTIONS.f08 && ./a.out 
This file was compiled by using the options -mtune=generic -march=x86-64 -O3

PGI 17.4 在编译时没有传递任何选项

$ pgfortran COMPILER_OPTIONS.f08 && ./a.out 
This file was compiled by using the options COMPILER_OPTIONS.f08 

编译时通过 -O3 的 PGI 17.4

$ pgfortran -O3 COMPILER_OPTIONS.f08 && ./a.out 
This file was compiled by using the options COMPILER_OPTIONS.f08 -O3 -Mvect=sse -Mcache_align -Mpre 

鉴于上述输出,我有以下问题

  1. 根据 Fortran 2008,预计返回的 COMPILER_OPTIONS() 过程是什么?
  2. 不同编译器的支持状态如何?

编辑:将标志从 -o3(输出文件 3)更改为 -O3(优化级别 3)。感谢 Pierre 和 francescalus 的反馈。

4

1 回答 1

4

Fortran 2008 将函数描述为 (13.8.2.6):

与处理器相关的字符串,描述控制程序翻译阶段的选项。

此函数返回“具有处理器相关长度的默认字符标量”。

对于编译器来说,这是一个非常大的自由度。此处提供的结果没有任何迹象表明存在任何违规行为。

于 2017-09-28T08:59:26.607 回答