如何从gfortran中的* .F90文件生成* .f90文件?

时间:2016-01-18 02:31:38

标签: fortran gfortran

我有一个小的fortran程序,其中包含一些用* .F90文件编写的预处理器指令。现在,我想从中生成一个* .f90 fortran文件,它会删除* .F90文件中与其他非激活指令相对应的所有额外代码。

在pgifortran中,我所要做的就是:

pgf90 -F file_name.F90

就是这样!它生成一个* .f90文件,其中的行与活动指令相关。

我怎么能在gfortran中做到这一点?

1 个答案:

答案 0 :(得分:3)

GNU Fortran选项

有关详细信息,请参阅https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html,但您可能会发现选项-E已预处理foo.F90stdout(当然,您可以将其移至例如{{}} 1}})。

foo.f90选项通常适用于GNU编译器前端,适用于C,C ++和Fortran。

默认情况下,为包含展开-E.fpp.FPP.F.FOR.FTN的文件启用预处理, .F90.F95.F03,您可以使用.F08手动启用它。您也可以使用-cpp手动禁用它。

示例程序

-nocpp

GNU C预处理器( program main implicit none #ifdef USER_MACRO print*,'USER_MACRO was defined' #endif #ifdef __GFORTRAN__ print*,'I am GNU Fortran (aka gfortran)!' #endif #ifdef __GNUC__ print*,'I am GNU C (or its preprocessor)!' #endif end program main

的结果
cpp

来自GNU Fortran的结果

$ cpp -E fpp.F90 
# 1 "fpp.F90"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 324 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "fpp.F90" 2
      program main
      implicit none







      print*,'I am GNU C (or its preprocessor)!'

      end program main

显然,您也可以看到如何预处理用户定义的符号:

$ gfortran -E fpp.F90 
# 1 "fpp.F90"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "fpp.F90"
      program main
      implicit none




      print*,'I am GNU Fortran (aka gfortran)!'


      print*,'I am GNU C (or its preprocessor)!'

      end program main

英特尔Fortran的结果

如果感兴趣,英特尔编译器支持与GCC相同的选项:

$ gfortran -E -DUSER_MACRO fpp.F90 
# 1 "fpp.F90"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "fpp.F90"
      program main
      implicit none

      print*,'USER_MACRO was defined'


      print*,'I am GNU Fortran (aka gfortran)!'


      print*,'I am GNU C (or its preprocessor)!'

      end program main

使用IBM XL Fortran进行预处理

IBM XL Fortran手册页有完整的详细信息,但请务必注意,必须通过$ ifort -E -DUSER_MACRO fpp.F90 # 1 "fpp.F90" program main implicit none print*,'USER_MACRO was defined' # 8 # 11 end program main 而不是-WF,-DUSER_MACRO提供预处理器符号。