我目前基于模块来编译程序(例如主程序foo
这取决于模块bar
) 如下:
gfortran -c bar.f90
gfortran -o foo.exe foo.f90 bar.o
当foo.f90
and bar.f90
位于同一目录中。如何指定 gfortran 应该查找的目录bar.o
当我打电话时use bar
in foo.f90
? (即我不想指定编译器应该链接bar.o
具体来说,我只是想让它去找到它。)
您可以使用以下命令告诉 gfortran 您的模块文件(.mod 文件)所在的位置-I
编译器标志。此外,您可以使用以下命令告诉编译器将编译后的模块放在哪里-J
编译器标志。请参阅“目录搜索选项”部分gfortran 手册页 http://linux.die.net/man/1/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
虽然上面的内容看起来需要花费很多精力在命令行上输入,但我通常在我的 makefile 中使用这个想法。
仅供参考,等效的 Intel fortran 编译器标志是-I
and -module http://software.intel.com/sites/products/documentation/hpc/composerxe/en-us/mans/ifort.txt。本质上 ifort 取代了-J
选项与-module
。注意 module 后面有一个空格,但 J 后面没有空格。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)