2016-01-18 83 views
1

我有一個小型Fortran程序,其中包含一些用* .F90文件編寫的預處理器指令。現在,我想從中生成一個* .f90 fortran文件,這會刪除* .F90文件中與其他未激活指令對應的所有額外代碼。如何從gfortran中的* .F90文件生成* .f90文件?

在pgifortran,所有我需要做的就是:

pgf90 -F file_name.F90 

,就是這樣!它生成一個* .f90文件,其中包含與活動指令相關的行。

我怎樣才能在gfortran上做到這一點?

+1

gfortran有'-E'選項。 – francescalus

+0

無論使用何種語言,您都可以使用cpp轉換任何源文件。當然,這將省略Fortran編譯器定義的任何預處理器符號。 – Jeff

+0

@francescalus:感謝您的輸入!有效! – Arun

回答

3

GNU Fortran語言選項

的全部細節見https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-Options.html,但您可能會發現該選項-E預處理foo.F90stdout(你當然可以,管它例如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 

從GNU C預處理器結果(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 

從英特爾Fortran

在情況下,它是利益的結果,英特爾編譯器支持相同的選項,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的

的IBM XL Fortran的人頁面有完整的細節,但重要的是要注意,預處理器符號必須通過-WF,-DUSER_MACRO而不是-DUSER_MACRO來提供。

+0

謝謝!這非常有幫助! – Arun