指定gfortran应该查找模块的目录

时间:2012-01-13 19:11:50

标签: module fortran gfortran

我目前基于模块编译程序(例如主程序foo,这取决于模块bar),如下所示:

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

foo.f90bar.f90位于同一目录中时,此方法正常。当我在bar.o中呼叫use bar时,如何指定gfortran应该查找foo.f90的目录? (即我不想指定编译器应该专门链接bar.o,我只是想让它去找它。)

2 个答案:

答案 0 :(得分:21)

您可以使用-I编译器标志告诉gfortran模块文件(.mod文件)的位置。此外,您可以告诉编译器将编译模块放在哪里-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。

之后

答案 1 :(得分:8)

在编译包含模块的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编译时。