20

foo私は現在、モジュール(モジュールに依存するメインプログラムなど)に基づいてプログラムをbar次のようにコンパイルしています。

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

これは、foo.f90bar.f90が同じディレクトリにある場合に正常に機能します。呼び出したbar.oときにgfortranが検索するディレクトリを指定するにはどうすればよいですか?(つまり、コンパイラーが具体的にリンクするように指定したくはありません。ただそれを見つけてもらいたいだけです。)use barfoo.f90bar.o

4

2 に答える 2

28

-Iモジュールファイル(.modファイル)がどこにあるかは、コンパイラフラグでgfortranに伝えることができます。さらに、-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

上記はコマンドラインで入力するのに大変な労力のように見えますが、私は通常、このアイデアをmakefileで使用します。

-I参考までに、同等のIntelFortranコンパイラフラグはと-moduleです。基本的に、ifortは-Jオプションを。に置き換えます-module。モジュールの後にスペースがありますが、Jの後にはないことに注意してください。

于 2012-01-16T10:40:00.770 に答える
9

モジュールを含む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コンパイル時に存在する必要があることに注意してください。

于 2012-01-13T22:33:18.297 に答える