モジュール (.mod) ファイルの使用

複数のプロジェクトで同じソースコードを使用することで起こりうる混乱を回避する方法の 1 つに、ルーチンをモジュール単位で整理する方法があります。モジュール (.mod ファイル) とは、データ・オブジェクト、パラメーター、構造体、プロシージャー、および演算子のようなエンティティーの仕様を持つプログラムユニットの種類です。これらのプリコンパイル済みの仕様と定義は、1 つまたはそれ以上のプログラムユニットで使用できます。モジュール・エンティティーへの部分的あるいは完全なアクセスは、プログラムの USE 文で提供されます。モジュールの一般的な用途は、グローバルデータの仕様、または派生型および関連した演算子の仕様を記述することです。

モジュールはプログラムを整理するための極めて便利な手段です。プログラマーは次のモジュールを設定することができます。

一部のプログラムでは、複数のディレクトリーに格納されたモジュールが必要になります。プログラムのコンパイル時に、-I コンパイラー・オプション (Linux* および Mac OS* X) または /I コンパイラー・オプション (Windows*) を使用することにより、プログラムに含める必要がある .mod ファイルの位置を指定できます。

-module path オプション (Linux および Mac OS X) または /module:path オプション (Windows) を指定することにより、モジュールファイルを作成するディレクトリーを指定できます。このオプションを使用しない場合は、モジュールファイルは現在のディレクトリーに作成されます。

ディレクトリーから .mod ファイルが検索される順序は、次のとおりです。


  1. USE 文が含まれるソースファイルのディレクトリー

  2. -module path オプション (Linux および Mac OS X) または /module:path オプション (Windows) により指定されたディレクトリー

  3. 現在の作業ディレクトリー

  4. -Idir オプション (Linux および Mac OS X) または /include オプション (Windows*) オプションにより指定されたディレクトリー

  5. FPATH 環境変数 (Linux および Mac OS X) または INCLUDE 環境変数 (Windows) により指定されたディレクトリー

  6. 標準のシステム・ディレクトリー

ほかのプログラムやサブプログラムから参照される前に、モジュールファイルが作成されていることを確認する必要があります。

モジュールを持つプログラムのコンパイル

コンパイルするファイルに 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

このコマンドにより、次のファイルが生成されます。

.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 ファイルが格納されているパスを指定します。