| Fortran プログラミングガイド |
第 3 章
プログラム開発
この章では、Fortran プログラムと使用すると大変便利な 2 つの強力なプログラム開発ツール、
makeと SCCS を簡単に説明します。現在では、
makeおよび SCCS の使用方法について、優れた本が何冊も市販されています。O'Reilly & Associates から出版されている Andrew Oram および Steve Talbott 著の『Managing Projects withmake』、Don Bolinger および Tan Bronson 著の『Applying RCS and SCCS』などがあります。
makeユーティリティを使用してプログラムの構築を簡単にする
makeユーティリティは、プログラムのコンパイルとリンク作業の効率を上げます。通常、大きなアプリケーションはいくつかのソースファイルとINCLUDEファイルから構成され、さらに、いくつかのライブラリとリンクする必要があります。1 つまたは複数のソースファイルを変更すると、プログラムのその部分をコンパイルし、リンクし直さなければなりません。アプリケーションを構成するファイル間の相互依存性を指定し、各部分をコンパイルし、リンクし直すのに必要なコマンドを指定することによって、このプロセスを自動化できます。指令ファイル中にあるこれらの指定を使用して、makeは、コンパイルし直す必要のあるファイルだけをコンパイルし、ユーザーが実行可能ファイルの構築に必要な、オプションとライブラリを使用してリンクします。以降の節では、簡単な例を使用してmakeの使用法を説明します。要約については、make(1) のマニュアルページを参照してください。メークファイル
メークファイルと呼ばれるファイルは、ソースファイルとオブジェクトファイルがお互いにどのように依存するかを構造化された方法でmakeに伝えるものです。さらに、これらのファイルをコンパイルし、リンクするのに必要なコマンドを定義します。たとえば、4 つのソースファイルから成るプログラムと メークファイル (ファイル名
makefile) があるとします。
demo%lsmakefilecommonblockcomputepts.fpattern.fstartupcore.fdemo%この例では、
pattern.fとcomputepts.fがcommonblockをインクルードするものと仮定します。そして、各.fファイルをコンパイルして、3 つの再配置可能なファイル (および一連のライブラリ) をpatternというプログラムにリンクします。
makefileの最初の行では、patternの作成がpattern.o、computepts.o、startupcore.oに依存することを表しています。次の行以降は、再配置可能な.oファイルとライブラリからpatternを作成するコマンドです。
makefileの各行は、ターゲットオブジェクトの依存性を表す規則と、そのオブジェクトを作成するのに必要なコマンドです。規則の構造は次のようになります。
- 依存性 - 個々の項目は、ターゲットファイルの名前とそのターゲットが依存するすべてのファイル名を列挙した行で始まります。
- コマンド - 個々の項目には、引き続く行が 1 行以上あり、当該項目がターゲットとするファイルを構築する Bourne シェルコマンドを指定します。これらのコマンド行は、タブでインデントさせておきます。
makeコマンド
demo%make
makeユーティリティは、現作業ディレクトリからmakefileまたはMakefileという名前のファイルを検索し、その中から指示を取り出します。
- 処理しなければならないターゲットファイル、それらが依存するファイル、ターゲットファイルを構築するためのコマンドをメークファイルから読み取る。
- 各ファイルが最後に変更された日付と時刻の情報を取り出す。
- ターゲットファイルの変更の日付と時刻が、依存するファイルよりも古ければ、
メークファイルにあるそのターゲットに関するコマンドを使用してターゲットファイルを再度構築する。マクロ
makeユーティリティのマクロ機能を使用すると、簡単なパラメータなしの文字列置換を行うことができます。たとえば、patternという名のターゲットプログラムを考えてみると、それを構成する再配置可能なファイルのリストを 1 つのマクロ文字列として表現できるので、変更しやすくなります。これは、
makeによって、マクロ文字列の実際の値に置換されます。次の例は、すべてのオブジェクトファイルを指定するマクロ定義をメークファイルの最初に追加します。
OBJ = pattern.o computepts.o startupcore.oこれによって、メークファイルの中で、このマクロを依存性リストに使用したり、ターゲット
patternのf77リンクコマンド上で使用したりできます。
pattern: $(OBJ)f77$(OBJ) -lcore77 -lcore -lsunwindow \-lpixrect -o patternマクロ値を置換する
makeマクロの初期値は、makeのコマンド行オプションで置換できます。次に例を示します。
この状態で、引数なしの
makeコマンドを実行すると、上記FFLAGSの値が使用されます。しかし、次のようなコマンド行を使用すると、この値を置換できます。
demo%make "FFLAGS=-u -O"
makeコマンド行上のFFLAGSマクロの定義は、メークファイルの初期値を無効にし、-Oフラグと-uフラグをf77に渡します。また、"FFLAGS="をコマンド行上で使用して、マクロを取り消して NULL 文字列を指定し、マクロの影響を無効にできます。
makeの接尾辞規則
メークファイルを簡単に書けるようにするため、makeはターゲットファイルの接尾辞に従って、独自のデフォルト規則を使用します。.f接尾辞を認識すると、makeはf77コンパイラを使用し、FFLAGSマクロで指定されたすべてのフラグと、-cオプション、コンパイルすべきソースファイルの名前を引数として渡します。
makeはデフォルトの規則を使用して、computepts.fとstartupcore.fをコンパイルします。同様に、
.f90ファイルに対する接尾辞規則によって、f95コンパイラを起動します。ただし、.f95の Fortran 95 ソースファイルや.modの Fortran 95 モジュールファイルに現在定義されている接尾辞規則はありません。SCCS による変更履歴の記録と変更管理
SCCS とは、ソースコード管理システム (Source Code Control System) のことです。SCCS には次のような機能があります。
この節では、SCCS を使用してこれらの操作を行う方法を説明し、前のプログラムを使用した簡単な例を示します。ここでは基本的な SCCS についてのみ説明し、SCCS コマンドのうち
create、edit、delgetだけを紹介します。SCCS を使用してファイルを管理する
SCCS の管理下へファイルを置くには、次の処理を行う必要があります。
SCCS ディレクトリを作成する
まず最初に、プログラム開発を行っているディレクトリに SCCS サブディレクトリを作成しなければなりません。次のコマンドを使用します。
demo% mkdir SCCSSCCS 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.f、computepts.f、pattern.fは、次の形式の初期化データによって指定できます。
CHARACTER*50 SCCSIDDATA SCCSID/"@(#)Cp3_develop.html 1.1 00/05/19\n"/このファイルを SCCS で処理し、コンパイルし、SCCS
のwhatコマンドでオブジェクトファイルを処理すると、次のように表示されます。
demo%f77 -c pattern.f...demo%what patternpattern:pattern.f 1.2 96/06/10また、
getでファイルに探査するたびに自動的に更新される、CTIMEという名前のPARAMETERも作成できます。
CHARACTER*(*) CTIMEPARAMETER ( 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.fdemo%ファイルのチェックアウトとチェックイン
ソースコードを SCCS 管理下に置いた後は、SCCS を 2 つの主な作業に使用します。編集を可能にするためにファイルをチェックアウトすることと、編集の完了したファイルをチェックインすることです。
ファイルのチェックアウトには、
sccs editコマンドを使用します。たとえば、次のように入力します。
demo%sccs edit computepts.fこの例では、SCCS は
computepts.fの書き込み可能なコピーを現在のディレクトリに作成し、ユーザーのログイン名を記録します。あるユーザーがファイルをチェックアウトしている間、他のユーザーはそのファイルをチェックアウトできません。しかし、他のユーザーは、誰がそのファイルをチェックアウトしているかを知ることはできます。編集が完了したら、
sccs delgetコマンドを使用して修正したファイルをチェックインします。たとえば、次のように入力します。
demo%sccs delget computepts.fこのコマンドを実行すると、SCCS システムは次の作業を行います。
- ログイン名を比較して、ユーザーがそのファイルをチェックアウトしたユーザーかどうかを確認する。
- 変更に関するコメントを入力するようにユーザーに求める。
- この編集セッションで何が変更されたかを記録する。
- 現在のディレクトリから
computepts.fの書き込み可能なコピーを削除する。- 書き込み可能なコピーを、SCCS キーワードが展開された読み取り専用のコピーで置き換える。
sccs delgetコマンドは、より簡単な SCCS の 2 つのコマンド、deltaとgetを組み合わせたものです。deltaコマンドが上記の項目のうちの最初の 3 つを実行し、getコマンドが最後の 2 つの作業を実行します。
|
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |
ホーム | 目次 | 前ページへ | 次ページへ | 索引 |