シェルプロンプトで起動される単純なコンパイラコマンドの構文は次のとおりです。
f95 [options] files...
ここで、files… には、拡張子として .f、.F、.f90、.f95、.F90、.F95、または .for が付いている 1 つ以上の Fortran のソースファイル名を指定します。options には、1 つ以上のコンパイラオプションフラグを指定します。.f90 または .f95 の拡張子が付いているファイルは、f95 コンパイラだけが認識する「自由形式」の Fortran 95 ソースファイルです。
次の例では、f95 は 2 つのソースファイルをコンパイルし、実行時デバッグを有効な状態にして growth という名前の実行可能ファイルを生成します。
demo% f95 -g -o growth growth.f fft.f95 |
f95 または f90 コマンドのいずれを使用しても、Fortran コンパイラを起動できます。
新規: コンパイラは、拡張子が .f03 または .F03 のソースファイルも受け入れます。これらは、.f95 および .F95 と同等とみなされ、ソースファイルに Fortran 2003 拡張機能が含まれていることを示す手段として利用できます。
コンパイラが受け付ける各種ソースファイルの拡張子については、「2.2.2 ファイル名の拡張子」を参照してください。
前述の例では、コンパイラは growth.o と fft.o のロードオブジェクトファイルを自動的に生成し、次にシステムリンカーを起動して growth という実行可能プログラムファイルを生成します。
コンパイルの終了後、オブジェクトファイル growth.o と fft.o が残ります。このため、ファイルの再リンクや再コンパイルを簡単に行うことができます。
コンパイルが失敗すると、エラーごとにメッセージが返されます。エラーがあるソースファイルについては、.o ファイルや実行可能プログラムファイルは作成されません。
コマンド行で入力するファイル名の拡張子によって、コンパイラがそのファイルをどのように処理するかが決まります。次の表に示されていない拡張子の付いたファイル名、および拡張子のないファイル名は、リンカーに渡されます。
表 2–1 Fortran コンパイラが認識可能なファイル名の拡張子
接尾辞 |
言語 |
処理 |
---|---|---|
.f |
Fortran 77 または Fortran 95 固定形式 |
Fortran ソースファイルをコンパイルし、オブジェクトファイルを現在のディレクトリに出力する。オブジェクトファイルのデフォルト名は、ソースファイル名に拡張子 .o を付けたもの |
.f95.f90 |
Fortran 95 自由形式 |
.f と同じ |
.f03 |
Fortran 2003 自由形式 |
.f と同じ |
.for |
Fortran 77 または Fortran 95 |
.f と同じ |
.F |
Fortran 77 または Fortran 95 固定形式 |
コンパイルの前に、FORTRAN 77 のソースファイルを Fortran または C のプリプロセッサで処理する |
.F95.F90 |
Fortran 95 自由形式 |
Fortran がコンパイルする前に、Fortran 95 自由形式のソースファイルを Fortran または C のプリプロセッサで処理する |
.F03 |
Fortran 2003 自由形式 |
.F95 と同じ |
.s |
アセンブラ |
アセンブラでソースファイルをアセンブルする |
.S |
アセンブラ |
アセンブルする前にアセンブラのソースファイルを C プリプロセッサで処理する |
.il |
インライン展開 |
インライン展開コードのテンプレートファイルを処理する。コンパイラはテンプレートを使って、選択されたルーチンのインライン呼び出しを展開します(テンプレートファイルは特殊なアセンブラファイル。inline(1) マニュアルページを参照)。 |
.o |
オブジェクトファイル |
オブジェクトファイルをリンカーに渡す |
.a、.so、. so.n |
ライブラリ |
ライブラリの名前をリンカーに渡す。.a ファイルは静的ライブラリ、.so と .so.n ファイルは動的ライブラリ |
Fortran 95 自由形式については、「4.1 ソース言語の機能」を参照してください。
Fortran コンパイラでは、コマンド行に複数のソースファイルを指定することができます。「コンパイルユニット」とも呼ばれる 1 つのソースファイル中に、複数の手続き (主プログラム、サブルーチン、関数、ブロックデータ、モジュールなど) を記述することができます。アプリケーションは、1 つのファイルに 1 つのソースコード手続きを記述して構成することも、同時に処理される手続きを 1 つのファイルにまとめて構成することもできます。これらの構成方法の長所と欠点については、『Fortran プログラミングガイド』を参照してください。
f95 は、fpp と cpp の 2 つのソースファイルプリプロセッサをサポートしています。いずれのプリプロセッサもコンパイラから起動され、ソースコード「マクロ」とシンボリック定義を展開してから、コンパイルを開始します。コンパイラでは、デフォルトで fpp が使用されます。-xpp=cpp オプションを指定すると、fpp から cpp にデフォルトを変更できます。-Dname オプションの説明も参照してください。
fpp は Fortran 言語専用のソースプリプロセッサです。詳細は、fpp(1) のマニュアルページと fpp の README を参照してください。fpp は、デフォルトでは、.F、.F90、.F95、または .F03 という拡張子の付いたファイル上で起動します。
fpp のソースコードは、次の Netlib Web サイトにあります。
http://www.netlib.org/fortran/
標準的な Unix C 言語のプリプロセッサについては、cpp(1) を参照してください。Fortran のソースファイルでは、fpp よりも cpp を使用することをお勧めします。
コンパイルとリンクをそれぞれ個別に実行することができます。-c オプションを指定すると、ソースファイルをコンパイルして .o オブジェクトファイルが生成されますが、実行可能ファイルは生成されません。-c オプションを指定しない場合、コンパイラはリンカーを起動します。このようにコンパイルとリンクを別々に実行すると、次の例に示すように、1 つのファイルを修正するための目的で全体を再コンパイルする必要がなくなります。
1 つのファイルをコンパイルし、別の手順でほかのオブジェクトファイルとリンクします。
demo% f95 -c file1.f (Make new object file) demo% f95 -o prgrm file1.o file2.o file3.o (Make executable file) |
リンク時には (2 行目)、完全なプログラムを作成するのに必要なすべてのオブジェクトファイルを必ず 指定してください。オブジェクトファイルが不足していると、未定義の外部参照エラー (ルーチンの不足) によって、リンクが失敗します。
コンパイルとリンクを別のステップで行う場合は、整合性のあるコンパイルとリンクのオプションを選択することが重要です。オプションによっては、プログラムの一部をコンパイルするときに使用したら、リンクするときにも同じオプションを使用する必要があります。すべてのソースファイルを、リンクも含めて指定してコンパイルする必要のあるオプションが数多くあります。
第 3 章では、このようなオプションについて説明します。
例: -fast を使用して sbr.f をコンパイルし、C ルーチンをコンパイルしてから、別のステップでリンクします。
demo% f95 -c -fast sbr.f demo% cc -c -fast simm.c demo% f95 -fast sbr.o simm.o link step; passes -fast to the linker |
コンパイラが認識できない引数がコマンド行で指定された場合、リンカーオプション、オブジェクトプログラムのファイル名、またはライブラリ名の可能性があるとして解釈されます。
基本的には次のように区別されます。
認識されないオプション (- が付いている) には、警告メッセージが出力されます。
認識されない非オプション (- が付いていない) には、警告メッセージが出力されません。ただし、これらのオプションがリンカーに渡されて、リンカーに認識されない場合には、リンカーエラーメッセージが出力されます。
たとえば、次のようにします。
demo% f95 -bit move.f <- -bit is not a recognized f95 option f95: Warning: Option -bit passed to ld, if ld is invoked, ignored otherwise demo% f95 fast move.f <- The user meant to type -fast ld: fatal: file fast: cannot open file; errno=2 ld: fatal: File processing errors. No output written to a.out |
最初の例では、-bit は f95 では認識されず、このオプションはこれを解釈しようとするリンカー (ld) に渡されます。ld では 1 文字のオプションを続けて並べることもできるため、-bit が -b -i -tと解釈されます。-b、-i、-t はいずれも ld の有効なオプションであるからです。これは、ユーザーが意図している場合と、意図していない場合とがあります。
2 つ目の例では、f95 の共通のオプションとして -fast を指定しようとしていますが、先頭のハイフンが抜けています。この場合も、コンパイラは引数をリンカーに渡し、リンカーはこれをファイル名と解釈します。
前述の例から、コンパイラコマンドを指定する場合には、十分な注意が必要であることがわかります。
f95 は、ソースファイル中にある各 MODULE 宣言に対して、それぞれモジュール情報ファイルを自動的に作成し、USE 文で引用されるモジュールを検索します。検出されたモジュール (MODULE module_name) ごとに、コンパイラは、対応するファイル module_name.mod を現在のディレクトリ内に生成します。たとえば、ファイル mysrc.f95 中にある MODULE list 単位のモジュール情報ファイル list.mod は f95 によって生成されます。
モジュール情報ファイルを記述および検索するためのデフォルトのパスの設定方法については、-Mpath および -moddir dirlist オプションフラグを参照してください。
すべてのコンパイルユニットで暗黙的に MODULE 宣言を行う方法については、-use コンパイラオプションを参照してください。
fdumpmod(1) コマンドを使用すると、.mod モジュール情報ファイルの内容を表示できます。
詳細は、「4.9 モジュールファイル」を参照してください。