我有一個小型Fortran程序,其中包含一些用* .F90文件編寫的預處理器指令。現在,我想從中生成一個* .f90 fortran文件,這會刪除* .F90文件中與其他未激活指令對應的所有額外代碼。如何從gfortran中的* .F90文件生成* .f90文件?
在pgifortran,所有我需要做的就是:
pgf90 -F file_name.F90
,就是這樣!它生成一個* .f90文件,其中包含與活動指令相關的行。
我怎樣才能在gfortran上做到這一點?
我有一個小型Fortran程序,其中包含一些用* .F90文件編寫的預處理器指令。現在,我想從中生成一個* .f90 fortran文件,這會刪除* .F90文件中與其他未激活指令對應的所有額外代碼。如何從gfortran中的* .F90文件生成* .f90文件?
在pgifortran,所有我需要做的就是:
pgf90 -F file_name.F90
,就是這樣!它生成一個* .f90文件,其中包含與活動指令相關的行。
我怎樣才能在gfortran上做到這一點?
的全部細節見https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html,但您可能會發現該選項-E
預處理foo.F90
到stdout
(你當然可以,管它例如foo.f90
)。
-E
選項通常適用於GNU編譯器前端,適用於C,C++和Fortran。
雖然預處理是默認啓用的文件與一些推廣.fpp
,.FPP
,.F
,.FOR
,.FTN
,.F90
,.F95
,.F03
或.F08
,您可以手動-cpp
啓用它。您也可以使用-nocpp
手動禁用它。從GNU的Fortran
$ 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
顯然
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 -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
在情況下,它是利益的結果,英特爾編譯器支持相同的選項,GCC:
$ ifort -E -DUSER_MACRO fpp.F90
# 1 "fpp.F90"
program main
implicit none
print*,'USER_MACRO was defined'
# 8
# 11
end program main
的IBM XL Fortran的人頁面有完整的細節,但重要的是要注意,預處理器符號必須通過-WF,-DUSER_MACRO
而不是-DUSER_MACRO
來提供。
謝謝!這非常有幫助! – Arun
gfortran有'-E'選項。 – francescalus
無論使用何種語言,您都可以使用cpp轉換任何源文件。當然,這將省略Fortran編譯器定義的任何預處理器符號。 – Jeff
@francescalus:感謝您的輸入!有效! – Arun