COMPILER_OPTIONS()在Fortran中应该返回什么?

时间:2017-09-28 08:43:25

标签: fortran gfortran pgi

Fortran 2008添加了一个名为COMPILER_OPTIONS()的新过程,根据GNU documentation,它应返回一个字符串,其中包含用于编译文件的选项。根据{{​​3}},几乎所有编译器(包括GNU和PGI)似乎都支持此功能。

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

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

以下是gfortranpgfortran

的结果

Gfortran 5.4没有编译时选项

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

Gfortran 5.4,-O3在编译时通过

$ 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 

PGI 17.4,-O3在编译时通过

$ 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. 不同编译器的支持状态是什么?
  3. 编辑:从-o3(输出文件3)将标志更改为-O3(优化级别3)。感谢Pierre和francescalus的反馈。

1 个答案:

答案 0 :(得分:4)

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

  

依赖于处理器的字符串,描述控制程序转换阶段的选项。

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

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