複数のプロジェクトで同じソースコードを使用することで起こりうる混乱を回避する方法の 1 つに、ルーチンをモジュール単位で整理する方法があります。モジュール (.mod ファイル) とは、データ・オブジェクト、パラメーター、構造体、プロシージャー、および演算子のようなエンティティーの仕様を持つプログラムユニットの種類です。これらのプリコンパイル済みの仕様と定義は、1 つまたはそれ以上のプログラムユニットで使用できます。モジュール・エンティティーへの部分的あるいは完全なアクセスは、プログラムの USE 文で提供されます。モジュールの一般的な用途は、グローバルデータの仕様、または派生型および関連した演算子の仕様を記述することです。
モジュールはプログラムを整理するための極めて便利な手段です。プログラマーは次のモジュールを設定することができます。
頻繁に使用されるルーチン
特定のオペレーティング・システムに対して固有のデータ定義
システム依存の言語拡張
一部のプログラムでは、複数のディレクトリーに格納されたモジュールが必要になります。プログラムのコンパイル時に、-I コンパイラー・オプション (Linux* および Mac OS* X) または /I コンパイラー・オプション (Windows*) を使用することにより、プログラムに含める必要がある .mod ファイルの位置を指定できます。
-module path オプション (Linux および Mac OS X) または /module:path オプション (Windows) を指定することにより、モジュールファイルを作成するディレクトリーを指定できます。このオプションを使用しない場合は、モジュールファイルは現在のディレクトリーに作成されます。
ディレクトリーから .mod ファイルが検索される順序は、次のとおりです。
USE 文が含まれるソースファイルのディレクトリー
-module path オプション (Linux および Mac OS X) または /module:path オプション (Windows) により指定されたディレクトリー
現在の作業ディレクトリー
-Idir オプション (Linux および Mac OS X) または /include オプション (Windows*) オプションにより指定されたディレクトリー
FPATH 環境変数 (Linux および Mac OS X) または INCLUDE 環境変数 (Windows) により指定されたディレクトリー
標準のシステム・ディレクトリー
ほかのプログラムやサブプログラムから参照される前に、モジュールファイルが作成されていることを確認する必要があります。
コンパイルするファイルに 1 つ以上のモジュールが定義されている場合、コンパイラーは 1 つ以上の .mod ファイルを生成します。
例えば、a.f90 ファイルには、以下のように定義されたモジュールが含まれています。
module test integer:: a contains subroutine f() end subroutine end module test module payroll . . . end module payroll
コンパイラー・コマンド:
ifort -c a.f90
このコマンドにより、次のファイルが生成されます。
test.mod
payroll.mod
a.o (Linux および Mac OS X) または a.obj (Windows)
.mod ファイルには、プログラム a.f90 で定義されたモジュールに関する必要な情報が含まれています。
次の例では、mod_def.f90 プログラムを使用します。このプログラムには、以下のように定義されたモジュールが含まれています。
file: mod_def.f90 module definedmod . . . end module
次のように、プログラムをコンパイルします。
ifort -c mod_def.f90
現在のディレクトリーに、mod_def.o オブジェクト・ファイル (Linux および Mac OS X) または mod_def.obj オブジェクト・ファイル (Windows) と definedmod.mod ファイルが作成されます。
.mod ファイルを別のディレクトリーで使用する必要がある場合は、次のように指定します。
file: use_mod_def.f90 program usemod use definedmod . . . end program
上記のプログラムをコンパイルする場合は、-I オプション (Linux) または /I オプション (Windows) を使用して、definedmod.mod ファイルが格納されているパスを指定します。