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%ls
makefilecommonblockcomputepts.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 pattern
pattern: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. |
ホーム | 目次 | 前ページへ | 次ページへ | 索引 |