我有一个小的fortran程序,其中包含一些用* .F90文件编写的预处理器指令。现在,我想从中生成一个* .f90 fortran文件,它会删除* .F90文件中与其他非激活指令相对应的所有额外代码。
在pgifortran中,我所要做的就是:
pgf90 -F file_name.F90
就是这样!它生成一个* .f90文件,其中的行与活动指令相关。
我怎么能在gfortran中做到这一点?
答案 0 :(得分:3)
有关详细信息,请参阅https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html,但您可能会发现选项-E
已预处理foo.F90
到stdout
(当然,您可以将其移至例如{{}} 1}})。
foo.f90
选项通常适用于GNU编译器前端,适用于C,C ++和Fortran。
默认情况下,为包含展开-E
,.fpp
,.FPP
,.F
,.FOR
,.FTN
的文件启用预处理, .F90
,.F95
或.F03
,您可以使用.F08
手动启用它。您也可以使用-cpp
手动禁用它。
-nocpp
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
$ 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
如果感兴趣,英特尔编译器支持与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手册页有完整的详细信息,但请务必注意,必须通过$ 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
提供预处理器符号。