Fortran プログラミングガイド ホーム目次前ページへ次ページへ索引


第 3 章

プログラム開発

この章では、Fortran プログラムと使用すると大変便利な 2 つの強力なプログラム開発ツール、make と SCCS を簡単に説明します。

現在では、make および SCCS の使用方法について、優れた本が何冊も市販されています。O'Reilly & Associates から出版されている Andrew Oram および Steve Talbott 著の『Managing Projects with make』、Don Bolinger および Tan Bronson 著の『Applying RCS and SCCS』などがあります。

make ユーティリティを使用してプログラムの構築を簡単にする

make ユーティリティは、プログラムのコンパイルとリンク作業の効率を上げます。通常、大きなアプリケーションはいくつかのソースファイルと INCLUDE ファイルから構成され、さらに、いくつかのライブラリとリンクする必要があります。1 つまたは複数のソースファイルを変更すると、プログラムのその部分をコンパイルし、リンクし直さなければなりません。アプリケーションを構成するファイル間の相互依存性を指定し、各部分をコンパイルし、リンクし直すのに必要なコマンドを指定することによって、このプロセスを自動化できます。指令ファイル中にあるこれらの指定を使用して、make は、コンパイルし直す必要のあるファイルだけをコンパイルし、ユーザーが実行可能ファイルの構築に必要な、オプションとライブラリを使用してリンクします。以降の節では、簡単な例を使用して make の使用法を説明します。要約については、make(1) のマニュアルページを参照してください。

メークファイル

メークファイルと呼ばれるファイルは、ソースファイルとオブジェクトファイルがお互いにどのように依存するかを構造化された方法で make に伝えるものです。さらに、これらのファイルをコンパイルし、リンクするのに必要なコマンドを定義します。

たとえば、4 つのソースファイルから成るプログラムと メークファイル (ファイル名 makefile) があるとします。

demo% ls 
makefile 
commonblock 
computepts.f 
pattern.f 
startupcore.f 
demo%

この例では、pattern.fcomputepts.fcommonblock をインクルードするものと仮定します。そして、各 .f ファイルをコンパイルして、3 つの再配置可能なファイル (および一連のライブラリ) を pattern というプログラムにリンクします。

この場合の makefile は次のようになります。

demo% cat makefile 
pattern: pattern.o computepts.o startupcore.o 
    f77 pattern.o computepts.o startupcore.o -lcore77 \ 
    -lcore -lsunwindow -lpixrect -o pattern 
pattern.o: pattern.f commonblock 
    f77 -c -u pattern.f 
computepts.o: computepts.f commonblock 
    f77 -c -u computepts.f 
startupcore.o: startupcore.f 
    f77 -c -u startupcore.f 
demo%

makefile の最初の行では、pattern の作成が pattern.o、computepts.o、startupcore.o に依存することを表しています。次の行以降は、再配置可能な .o ファイルとライブラリから pattern を作成するコマンドです。

makefile の各行は、ターゲットオブジェクトの依存性を表す規則と、そのオブジェクトを作成するのに必要なコマンドです。規則の構造は次のようになります。

ターゲット : 依存性リスト
<TAB> 構築コマンド

ここで <TAB> は制御文字を示します。

make コマンド

make コマンドは次のように引数なしでも起動できます。

demo% make 

make ユーティリティは、現作業ディレクトリから makefile または Makefile という名前のファイルを検索し、その中から指示を取り出します。

make ユーティリティの一般的な動作は次のとおりです。

マクロ

make ユーティリティのマクロ機能を使用すると、簡単なパラメータなしの文字列置換を行うことができます。たとえば、pattern という名のターゲットプログラムを考えてみると、それを構成する再配置可能なファイルのリストを 1 つのマクロ文字列として表現できるので、変更しやすくなります。

マクロ文字列を定義するときは、次のような形式を使用します。

名前 = 文字列

マクロ文字列を使用するときは、次のように指定します。

$(名前)

これは、make によって、マクロ文字列の実際の値に置換されます。

次の例は、すべてのオブジェクトファイルを指定するマクロ定義をメークファイルの最初に追加します。

OBJ = pattern.o computepts.o startupcore.o 

これによって、メークファイルの中で、このマクロを依存性リストに使用したり、ターゲット patternf77 リンクコマンド上で使用したりできます。

pattern: $(OBJ)
    f77 $(OBJ) -lcore77 -lcore -lsunwindow \
    -lpixrect -o pattern 

マクロ文字列の名前が 1 文字の場合、括弧は省略できます。

マクロ値を置換する

make マクロの初期値は、make のコマンド行オプションで置換できます。次に例を示します。

FFLAGS=-u
OBJ = pattern.o computepts.o startupcore.o
pattern: $(OBJ)
    f77 $(FFLAGS) $(OBJ) -lcore77 -lcore -lsunwindow \
    -lpixrect -o pattern 
pattern.o: parrern.f commonblock
    f77 $(FFLAGS) -c pattern.f
computepts.o:
    f77 $(FFLAGS) -c computepts.f

この状態で、引数なしの make コマンドを実行すると、上記 FFLAGS の値が使用されます。しかし、次のようなコマンド行を使用すると、この値を置換できます。

demo% make "FFLAGS=-u -O" 

make コマンド行上の FFLAGS マクロの定義は、メークファイルの初期値を無効にし、-O フラグと -u フラグを f77 に渡します。また、"FFLAGS=" をコマンド行上で使用して、マクロを取り消して NULL 文字列を指定し、マクロの影響を無効にできます。

make の接尾辞規則

メークファイルを簡単に書けるようにするため、make はターゲットファイルの接尾辞に従って、独自のデフォルト規則を使用します。.f 接尾辞を認識すると、makef77 コンパイラを使用し、FFLAGS マクロで指定されたすべてのフラグと、-c オプション、コンパイルすべきソースファイルの名前を引数として渡します。

次の例では、この規則を 2 回利用しています。

OBJ = pattern.o computepts.o startupcore.o 
FFLAGS=-u 
pattern: $(OBJ) 
    f77 $(OBJ) -lcore77 -lcore -lsunwindow \ 
    -lpixrect -o pattern 
pattern.o: pattern.f commonblock 
    f77 $(FFLAGS) -c pattern.f 
computepts.o: computepts.f commonblock 
startupcore.o: startupcore.f

make はデフォルトの規則を使用して、computepts.fstartupcore.f をコンパイルします。

同様に、.f90 ファイルに対する接尾辞規則によって、f95 コンパイラを起動します。ただし、.f95 の Fortran 95 ソースファイルや .mod の Fortran 95 モジュールファイルに現在定義されている接尾辞規則はありません。

SCCS による変更履歴の記録と変更管理

SCCS とは、ソースコード管理システム (Source Code Control System) のことです。SCCS には次のような機能があります。

SCCS の基本操作は次の 3 つです。

この節では、SCCS を使用してこれらの操作を行う方法を説明し、前のプログラムを使用した簡単な例を示します。ここでは基本的な SCCS についてのみ説明し、SCCS コマンドのうち createeditdelget だけを紹介します。

SCCS を使用してファイルを管理する

SCCS の管理下へファイルを置くには、次の処理を行う必要があります。

SCCS ディレクトリを作成する

まず最初に、プログラム開発を行っているディレクトリに SCCS サブディレクトリを作成しなければなりません。次のコマンドを使用します。

demo% mkdir SCCS

なお、SCCS は必ず大文字にします。

SCCS ID キーワードを挿入する

ファイルごとにいくつかの SCCS ID キーワードを挿入する開発者もいますが、これは必須ではありません。後で、SCCS の get または delget コマンドによってファイルがチェックインされるたびに、キーワードはバージョン番号によって識別されます。キーワードの文字列は次の 3 ヶ所によく置かれます。

キーワードを使用する利点は、ソースリストの中にも、コンパイルされたオブジェクトプログラムの中にも、バージョン情報が現れることです。文字列 @(#) を前に付けておけば、what コマンドを使用して、オブジェクトファイル中のキーワードを出力できます。

パラメータとデータの定義文だけを含むヘッダーファイルをインクルードした場合は、初期化データの生成は行われず、ファイルに対するキーワードは、通常コメントの中か PARAMETER 文に付けられます。ASCII データファイルやメークファイルのようなファイルの場合には、SCCS 情報はコメントに現れます。

SCCS キーワードは %キーワード% の形式で現れ、SCCS の get コマンドによって本来の値に展開されます。頻繁に使用されるキーワードは、次のとおりです。

@(#) は、what コマンドで認識される識別子文字列 @(#) に展開されます。
Cp3_develop.html は、ソースファイルの名前に展開されます。
1.1 は、当該 SCCS が管理するファイルのバージョン番号に展開されます。
00/05/19 は、現在の日付に展開されます。

たとえば、メークファイルのコメント中で次のようなキーワードを使用すると、メークファイルを指定することができます。

#   @(#)Cp3_develop.html 1.1 00/05/19

ソースファイルの startupcore.fcomputepts.fpattern.f は、次の形式の初期化データによって指定できます。

    CHARACTER*50 SCCSID 
    DATA SCCSID/"@(#)Cp3_develop.html 1.1 00/05/19\n"/

このファイルを SCCS で処理し、コンパイルし、SCCS what コマンドでオブジェクトファイルを処理すると、次のように表示されます。

demo% f77 -c pattern.f
...
demo% what pattern
pattern:
    pattern.f 1.2 96/06/10    

また、get でファイルに探査するたびに自動的に更新される、CTIME という名前の PARAMETER も作成できます。

    CHARACTER*(*) CTIME
    PARAMETER ( CTIME="00/05/19") 

INCLUDE ファイルは、SCCS スタンプが入っている Fortran のコメントで注釈できます。

C   @(#)Cp3_develop.html 1.1 00/05/19 


注 - Fortran 95 ソースコードファイルから取得した 1 文字の型成分名を使用すると、SCCS キーワード認識と競合する可能性があります。たとえば、Fortran 95 構造体成分参照 XZ は SCCS から渡された場合、SCCS get を実行した後 XZ となります。ここで、Fortran 95 プログラムで SCCS を使用するとき、構造体成分を定義するのに 1 文字の英字を使用しないように注意します。たとえば、Fortran 95 プログラムの構造体参照が X%YY%Z の場合、%YY% は SCCS によりキーワード参照として解釈されません。その他の方法としては、SCCS で get -k オプションを指定すると、SCCS キーワード ID を拡張しなくてもファイルが取得されます。

SCCS ファイルを作成する

これで、SCCS の create コマンドによって、これらのファイルを SCCS の管理下に置くことができます。

demo% sccs create makefile commonblock startupcore.f \ 
  computepts.f pattern.f 
demo%

ファイルのチェックアウトとチェックイン

ソースコードを SCCS 管理下に置いた後は、SCCS を 2 つの主な作業に使用します。編集を可能にするためにファイルをチェックアウトすることと、編集の完了したファイルをチェックインすることです。

ファイルのチェックアウトには、sccs edit コマンドを使用します。たとえば、次のように入力します。

demo% sccs edit computepts.f 

この例では、SCCS は computepts.f の書き込み可能なコピーを現在のディレクトリに作成し、ユーザーのログイン名を記録します。あるユーザーがファイルをチェックアウトしている間、他のユーザーはそのファイルをチェックアウトできません。しかし、他のユーザーは、誰がそのファイルをチェックアウトしているかを知ることはできます。

編集が完了したら、sccs delget コマンドを使用して修正したファイルをチェックインします。たとえば、次のように入力します。

demo% sccs delget computepts.f 

このコマンドを実行すると、SCCS システムは次の作業を行います。

sccs delget コマンドは、より簡単な SCCS の 2 つのコマンド、deltaget を組み合わせたものです。delta コマンドが上記の項目のうちの最初の 3 つを実行し、get コマンドが最後の 2 つの作業を実行します。


サン・マイクロシステムズ株式会社
Copyright information. All rights reserved.
ホーム   |   目次   |   前ページへ   |   次ページへ   |   索引