Module 指定gfortran应在其中查找模块的目录
我目前编译基于模块的程序(例如主程序Module 指定gfortran应在其中查找模块的目录,module,fortran,gfortran,Module,Fortran,Gfortran,我目前编译基于模块的程序(例如主程序foo,它取决于模块bar),如下所示: gfortran -c bar.f90 gfortran -o foo.exe foo.f90 bar.o 当foo.f90和bar.f90在同一个目录中时,此功能可以正常工作。在foo.f90中调用use bar时,如何指定gfortran应该在其中查找bar.o的目录?(也就是说,我不想指定编译器应该链接bar.o,具体地说,我只想让它找到它。)编译包含模块的Fortran源代码时,会随对象文件一起创建一个.mo
foo
,它取决于模块bar
),如下所示:
gfortran -c bar.f90
gfortran -o foo.exe foo.f90 bar.o
当
foo.f90
和bar.f90
在同一个目录中时,此功能可以正常工作。在foo.f90
中调用use bar
时,如何指定gfortran应该在其中查找bar.o
的目录?(也就是说,我不想指定编译器应该链接bar.o
,具体地说,我只想让它找到它。)编译包含模块的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编译时存在。您可以使用
-I
编译器标志告诉gfortran模块文件(.mod文件)的位置。此外,您还可以使用-J
编译器标志告诉编译器将已编译模块放在何处。请参阅中的“目录搜索选项”部分
我使用它们将对象(.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
和。基本上,ifort将-J
选项替换为-module
。请注意,模块后面有空格,但J后面没有。您是否尝试过gfortran-I/path/to/the/obj/file?