我目前編譯基於模塊(如依賴於模塊bar
主程序foo
)程序如下:指定目錄下gfortran應該尋找模塊
gfortran -c bar.f90
gfortran -o foo.exe foo.f90 bar.o
能正常工作時foo.f90
和bar.f90
都在相同的目錄。如何指定一個目錄,gfortran應該尋找bar.o
當我打電話的foo.f90
use bar
? (即,我不想指定編譯器應特別鏈接bar.o
,我只是希望它能夠找到它。)
我目前編譯基於模塊(如依賴於模塊bar
主程序foo
)程序如下:指定目錄下gfortran應該尋找模塊
gfortran -c bar.f90
gfortran -o foo.exe foo.f90 bar.o
能正常工作時foo.f90
和bar.f90
都在相同的目錄。如何指定一個目錄,gfortran應該尋找bar.o
當我打電話的foo.f90
use bar
? (即,我不想指定編譯器應特別鏈接bar.o
,我只是希望它能夠找到它。)
你可以告訴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.
當編譯一個包含模塊的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編譯時間。
後你嘗試gfortran -I /路徑/到/的/ OBJ /文件? – 2012-01-13 22:05:42