2012-01-13 55 views
13

我目前編譯基於模塊(如依賴於模塊bar主程序foo)程序如下:指定目錄下gfortran應該尋找模塊

gfortran -c bar.f90 
gfortran -o foo.exe foo.f90 bar.o 

能正常工作時foo.f90bar.f90都在相同的目錄。如何指定一個目錄,gfortran應該尋找bar.o當我打電話的foo.f90use bar? (即,我不想指定編譯器應特別鏈接bar.o,我只是希望它能夠找到它。)

+0

後你嘗試gfortran -I /路徑/到/的/ OBJ /文件? – 2012-01-13 22:05:42

回答

19

你可以告訴gfortran您的模塊文件(.mod文件)位於與-I編譯器標誌。此外,你可以告訴編譯器放置編譯的模塊與-J編譯器標誌。請參閱gfortran man page中的「目錄搜索選項」部分。

我使用這些放置我的兩個目標(.o文件),並在同一目錄下我的模塊文件,但在不同的目錄下我所有的源文件,所以我不弄亂我的源目錄。例如,

SRC = /path/to/project/src 
OBJ = /path/to/project/obj 
BIN = /path/to/project/bin 

gfortran -J$(OBJ) -c $(SRC)/bar.f90 -o $(OBJ)/bar.o 
gfortran -I$(OBJ) -c $(SRC)/foo.f90 -o $(OBJ)/foo.o 
gfortran -o $(BIN)/foo.exe $(OBJ)/foo.o $(OBJ)/bar.o 

雖然上述貌似很多的努力,在命令行上鍵入的時候,我一般都用這個想法在我的makefile。

僅供參考,等效的英特爾fortran編譯器標誌是-I-module。從本質上講ifort替換-J選項與-module。請注意,有模塊後的空間,但不J.

7

當編譯一個包含模塊的Fortran源代碼時,一個.mod(通常是文件與模塊名稱相同)文件與目標文件一起創建。 mod文件應在同一目錄下的源文件正在使用該模塊,或者它應該使用-i參數指出,在編譯時:

gfortran -c bar.f90 
gfortran -c foo.f90 -I$PATH_TO_MOD_FILE 
gfortran -o foo.exe foo.o bar.o 

注意.MOD需求的存在foo.f90編譯時間。

相關問題