Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Module 指定gfortran应在其中查找模块的目录_Module_Fortran_Gfortran - Fatal编程技术网

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?