私は現在、次のようにモジュール(モジュールfoo
に依存するメインプログラムbar
など)に基づいてプログラムをコンパイルしています。
gfortran -c bar.f90
gfortran -o foo.exe foo.f90 bar.o
これは、foo.f90
とbar.f90
が同じディレクトリにある場合に正常に機能します。 bar.o
でuse bar
を呼び出すときに、gfortranがfoo.f90
を検索するディレクトリを指定するにはどうすればよいですか? (つまり、コンパイラーがbar.o
をリンクするように指定したくありません。具体的には、それを見つけてもらいたいだけです。)
-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の後にはないことに注意してください。
モジュールを含む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のコンパイル時に存在する必要があることに注意してください。