web-dev-qa-db-ja.com

gfortranがモジュールを探すディレクトリを指定します

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

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

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

18
astay13

-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

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

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

22
Chris

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

8
milancurcic