我目前编译基于模块(如依赖于模块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