Oracle Solaris Studio 12.2: Fortran ユーザーズガイド

4.9 モジュールファイル

Fortran 95 の MODULE を含むファイルをコンパイルすると、ソースで検出された MODULE ごとにモジュールインタフェースファイル (.mod ファイル) が生成されます。ファイル名は MODULE 名を基に付けられます。たとえば、MODULE xyz からは xyz.mod (すべて小文字) というファイル名が作成されます。

コンパイルを実行すると、MODULE 文を含むソースファイルごとにモジュール実装オブジェクトファイル (.o) が生成されます。モジュール実装オブジェクトファイルとその他すべてのオブジェクトファイルをリンクすると、実行可能ファイルを作成できます。

コンパイラは、-moddir=dir フラグまたは MODDIR 環境変数で指定されたディレクトリにモジュールインタフェースファイルと実装オブジェクトファイルを作成します。指定されていない場合は、現在の作業ディレクトリにある .mod ファイル に書き込みます。

コンパイラは、USE modulename 文のコンパイル時、現在の作業ディレクトリでインタフェースファイルを探します。-Mpath オプションを使用すると、コンパイラに追加の検索パスを提供できます。モジュール実装オブジェクトファイルは、リンク処理のコマンド行に明示的に列挙する必要があります。

通常、プログラマは、ファイルごとに単一の MODULE を定義し、MODULE 文とそれを含むソースファイルに同じ名前を割り当てます。ただし、これは必須ではありません。

前述の例では、すべてのファイルが一度にコンパイルされます。モジュールソースファイルは、主プログラムでの使用前に最初にコンパイルされます。


demo% cat mod_one.f90
 MODULE one
    ...
 END MODULE
demo% cat mod_two.f90
 MODULE two
    ...
 END MODULE
demo% cat main.f90
 USE one
 USE two
   ...
 END
demo% f95 -o main mod_one.f90 mod_two.f90 main.f90

コンパイルによって次のファイルが作成されます。

mainmain.oone.modmod_one.otwo.modmod_two.o

次の例では、各単位を個別にコンパイルし、それらをリンクします。


demo% f95 -c mod_one.f90 mod_two.f90
demo% f95 -c main.f90
demo% f95 -o main main.o mod_one.o mod_two.o

main.f90 のコンパイル時、コンパイラは、現在のディレクトリから one.mod および two.mod を検索します。これらのファイルは、USE 文のモジュールを参照するファイルをコンパイルする前にコンパイルしておく必要があります。そのあとの手順で、モジュール実装オブジェクトファイル mod_one.o および mod_two.o をその他すべてのオブジェクトファイルとリンクして、実行可能ファイルを作成します。

4.9.1 モジュールの検索

Version 7.0 の Fortran コンパイラでは、.mod ファイルはアーカイブ (.a) ファイルに格納できます。アーカイブファイルは、モジュールを検索するコマンド行で、-Mpath フラグによって明示的に指定する必要があります。デフォルトでは、コンパイラはアーカイブファイルを検索しません。

USE 文にある .mod ファイルのみが検索されます。たとえば、Fortran の USE mymod によって、コンパイラは、デフォルトでモジュールファイル mymod.mod を検索します。

検索時には、モジュールファイルが記述されるディレクトリが優先されます。これは、-moddir=dir オプションフラグおよび MODDIR 環境変数によってコントロールできます。つまり、-Mpath オプションのみが指定されている場合は、モジュールに対して、-M フラグに示されたディレクトリおよびファイルよりも先に、現在のディレクトリが検索されます。

4.9.2 -use=list オプションフラグ

-use=list フラグによって、1 つ以上の暗黙的な USE 文がこのフラグを指定してコンパイルされる副プログラムまたはモジュールの副プログラムに挿入されます。このフラグを使用すると、モジュールまたはモジュールファイルが、ライブラリまたはアプリケーションの機能のために要求された場合に、ソースプログラムを修正する必要がなくなります。

-use=module_name を使用してコンパイルすると、USE module_name をコンパイルされる各副プログラムまたはモジュールに追加する効果があります。-use=module_file_name を使用してコンパイルすると、module_file_name ファイルに含まれる各モジュールに USE module_name を追加する効果があります。

4.9.3 fdumpmod コマンド

fdumpmod(1) コマンドを使用すると、モジュール情報ファイルの内容を表示できます。


demo% fdumpmod x.mod group.mod
x 1.0 v8,i4,r4,d8,n16,a4 x.mod
group 1.0 v8,i4,r4,d8,n16,a4 group.mod

fdumpmod コマンドによって、単一の .mod ファイル、連結される .mod ファイルによって形成されるファイル、.mod ファイルの .a アーカイブにあるモジュールについての情報が表示されます。表示には、モジュール名、バージョン番号、対象のアーキテクチャー、およびそのモジュールと互換性のあるコンパイルオプションを示すフラグが含まれます。詳細は、fdumpmod(1) マニュアルページを参照してください。