Sun Studio 12: Fortran ユーザーズガイド

2.2 コンパイラの起動

シェルプロンプトで起動される単純なコンパイラコマンドの構文は次のとおりです。

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 95 コンパイラを起動できます。


新規: コンパイラは、拡張子が .f03 または .F03 のソースファイルも受け付けます。これらは、.f95 および .F95 と同等とみなされ、ソースファイルに Fortran 2003 拡張機能が含まれていることを示す手段として利用できます。

コンパイラが受け付ける各種ソースファイルの拡張子については、「2.2.2 ファイル名の拡張子」を参照してください。

2.2.1 コンパイルとリンク処理の流れ

前述の例では、コンパイラは growth.offt.o のロードオブジェクトファイルを自動的に生成し、次にシステムリンカーを起動して growth という実行可能プログラムファイルを生成します。

コンパイルの終了後、オブジェクトファイル growth.offt.o が残ります。このため、ファイルの再リンクや再コンパイルを簡単に行うことができます。

コンパイルに失敗すると、それぞれのエラーごとにメッセージが表示されます。エラーがあるソースファイルについては、.o ファイルや実行可能プログラムファイルは作成されません。

2.2.2 ファイル名の拡張子

コマンド行で入力するファイル名の拡張子によって、コンパイラがそのファイルをどのように処理するかが決まります。次の表に示されていない拡張子の付いたファイル名、および拡張子のないファイル名は、リンカーに渡されます。

表 2–1 Fortran 95 コンパイラが認識可能なファイル名の拡張子

拡張子 

言語 

コンパイラの動作 

.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.s.o、.so.n

ライブラリ 

ライブラリの名前をリンカーに渡す。.a ファイルは静的ライブラリ、.so.so.n ファイルは動的ライブラリ

Fortran 95 自由形式については、「4.1 ソース言語の機能」を参照してください。

2.2.3 ソースファイル

Fortran コンパイラでは、コマンド行に複数のソースファイルを指定することができます。「コンパイルユニット」とも呼ばれる 1 つのソースファイル中に、複数の手続き (主プログラム、サブルーチン、関数、ブロックデータ、モジュールなど) を記述することができます。アプリケーションは、1 つのファイルに 1 つのソースコード手続きを記述して構成することも、同時に処理される手続きを 1 つのファイルにまとめて構成することもできます。これらの構成方法の長所と欠点については、『Fortran プログラミングガイド』を参照してください。

2.2.4 ソースファイルプリプロセッサ

f95 は、fppcpp の 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 を使用することをお勧めします。

2.2.5 別々に実行するコンパイルとリンク

コンパイルとリンクをそれぞれ個別に実行することができます。-c オプションを指定すると、ソースファイルをコンパイルして .o オブジェクトファイルが生成されますが、実行可能ファイルは生成されません。-c オプションを指定しない場合、コンパイラはリンカーを起動します。このようにコンパイルとリンクを別々に実行すると、次の例に示すように、 1 つのファイルを修正するための目的で全体を再コンパイルする必要がなくなります。

1 つのファイルをコンパイルし、別の手順でほかのオブジェクトファイルとリンクします。


demo% f95 -c file1.f                          (新規オブジェクトファイルを作成)
demo% f95 -o prgrm file1.o file2.o file3.o         (実行可能ファイルを作成)

リンクを実行する時には (2 行目)、プログラム全体を構成するのに必要なオブジェクトファイルをすべて指定してください。オブジェクトファイルが不足していると、未定義の外部参照エラー (ルーチンの不足) によって、リンクが失敗します。

2.2.6 コンパイルとリンクの整合性

コンパイルとリンクを別々に行う場合、コンパイルと リンクの各オプションを選択するときにそれらの整合性を確認しておく必要があります。オプションを指定してプログラムのコンパイルを行なった場合は、同じオプションを指定してリンクを行なってください。すべてのソースファイルを、リンクも含めて指定してコンパイルする必要のあるオプションが数多くあります。

第 3 章では、このようなオプションについて説明します。

例: sbr.f-fast でコンパイルし、C ルーチンをコンパイルします。次に、別途、リンクを行います。


demo% f95 -c -fast sbr.f
demo% cc -c -fast simm.c
demo% f95 -fast sbr.o simm.o        リンク: -fast  をリンカーに渡す

2.2.7 認識されないコマンド行引数

コンパイラが認識できない引数がコマンド行で指定された場合、リンカーオプション、オブジェクトプログラムのファイル名、またはライブラリ名の可能性があるとして解釈されます。

基本的には次のように区別されます。

例:


demo% f95 -bit move.f           <-  -bit は f95 オプションとして認識されません。
f95: 警告: ld が起動される場合は、オプション -bit は ld に渡されます。
それ以外は無視されます。
demo% f95 fast move.f           <-   入力ミス (-fast と入力しようとした)
ld: fatal: ファイル fast: ファイルをオープンできません: 
ファイルもディレクトリもありません。
ld: fatal: ファイル処理エラー。a.out へ書き込まれる出力がありません。

最初の例では、-bitf95 では認識されず、このオプションはこれを解釈しようとするリンカー (ld) に渡されます。ld では 1 文字のオプションを続けて並べることもできるため、-bit-b -i -tと解釈されます。-b-i-t はいずれも ld の有効なオプションであるからです。これは、ユーザーが意図している場合と、意図していない場合とがあります。

2 つ目の例では、f95 の共通のオプションとして -fast を指定しようとしていますが、先頭のハイフンが抜けています。この場合も、コンパイラは引数をリンカーに渡し、リンカーはこれをファイル名と解釈します。

前述の例から、コンパイラコマンドを指定する場合には、十分な注意が必要であることがわかります。

2.2.8 Fortran 95 モジュール

f95 は、ソースファイル中にある各 MODULE 宣言に対して、それぞれモジュール情報ファイルを自動的に作成し、USE 文で引用されるモジュールを検索します。見つかったモジュール (MODULE module_name) ごとに、コンパイラは、対応するファイル module_name.mod を現在のディレクトリ内に生成します。たとえば、ファイル mysrc.f95 中にある MODULE list 単位のモジュール情報ファイル list.modf95 によって生成されます。

モジュール情報ファイルを記述および検索するためのデフォルトのパスの設定方法については、-Mpath および -moddir dirlist オプションフラグを参照してください。

すべてのコンパイルユニットで暗黙的に MODULE 宣言を行う方法については、-use コンパイラオプションを参照してください。

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

詳細は、「4.9 モジュールファイル」を参照してください。