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

ast*_*y13 18 fortran module gfortran

我目前基于模块(例如foo依赖于模块的主程序bar)编译程序如下:

gfortran -c bar.f90
gfortran -o foo.exe foo.f90 bar.o
Run Code Online (Sandbox Code Playgroud)

这在当foo.f90bar.f90位于同一目录中时工作正常.如何指定一个目录,gfortran应该寻找bar.o当我打电话use barfoo.f90?(即我不想指定编译器应该bar.o专门链接,我只是想让它去找它.)

Chr*_*ris 23

您可以使用-I编译器标志告诉gfortran模块文件(.mod文件)的位置.此外,您可以告诉编译器将已编译模块放在编译-J器标志的位置.请参阅gfortran手册页中的"目录搜索选项"部分.

我使用它们将我的对象(.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
Run Code Online (Sandbox Code Playgroud)

虽然上面看起来在命令行上输入很多努力,但我通常在makefile中使用这个想法.

仅供参考,等效的英特尔fortran编译器标志是-I-module.基本上ifort替换了-J选项-module.请注意,模块之后有一个空格,但在J.之后没有.


mil*_*cic 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
Run Code Online (Sandbox Code Playgroud)

请注意.mod需要存在于foo.f90编译时.