[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

2. 全般的な概念

以下の節ではAutomakeがどう働くかを理解するのを助ける、2、3の基本的な概念を カバーする。


2.1 全般的な操作

Automakeは`Makefile.am'を読み、`Makefile.in'を生成することで働 く。`Makefile.am'で定義される特定のマクロやターゲットはautomakeにもっ と特化したコードを生成するよう指示する。例えば、`bin_PROGRAMS'マク ロ定義はプログラムをコンパイルしリンクするためのターゲットを生成させるだろう。

`Makefile.am'のマクロ定義やターゲットは生成されたファイルにそのままコピーさ れる。こうして任意のコードを生成される`Makefile.in'に加えることがで きる。例えば、Automakeの配布物は標準的でないcvs-distターゲットを 含み、それはAutomake管理者が彼のソース管理システムから配布物を作成するの に使用されるのだ。

GNUのmake拡張はAutomakeによって認識されないことを注意せよ。 `Makefile.am'でそのような拡張を使用すれば、エラーや混乱させる振る 舞いを引き起こすだろう。

Automakeは隣接するターゲットとマクロ定義のコメントを賢いやり方で集 めようとする。

`Makefile.am'で定義されるターゲットは一般的にautomakeによっ て自動的に生成される同じ名前のターゲットを上書きする。これはサポートされ ている特徴だが、ときどき生成される規則は非常に特殊なので、一般的にその使 用を避けるのが最善である。

同様に、`Makefile.am'で定義されるマクロはautomakeが通常生成す るマクロの定義を上書きするだろう。この特徴はターゲット定義を上書きする能力 よりも頻繁に役立つ。automakeによって生成されるマクロの多くは内部利 用だけのためであると想定されており、それらの名前は将来のリリースで変更さ れるかもしれないことに注意しなさい。

マクロ定義を調べるとき、Automakeはその定義で参照されるマクロを再帰的に調べる だろう。例えば、Automakeが次のコード片でfoo_SOURCESの中身を見てい るなら、

 
xs = a.c b.c
foo_SOURCES = c.c $(xs)

foo_SOURCESの中身として`a.c'、`b.c'、`c.c'というファ イルを使用するだろう。

Automakeはまた出力にコピーされないコメントの形式を許す。`##' で始まる全ての行はAutomakeに完全に無視される。

`Makefile.am'の最初の行にこう書いておくのが慣習である。

 
## Process this file with automake to produce Makefile.in

2.2 深さ

automakeは三つの種類のディレクトリ階層、`flat'、`shallow'、そ して`deep'をサポートする。

flatパッケージは全てのファイルが単一のディレクトリにあるようなもの である。そのようなパッケージの`Makefile.am'は定義により SUBDIRSマクロがない。そのようなパッケージの例はtermutilsで ある。

deepパッケージは全てのソースがサブディレクトリにあるようなものであ る。その一番上の階層のディレクトリは主に設定情報を含んでいる。GNU cpioは GNU tarと同じく、そのようなパッケージの良い例である。deepパッケー ジの一番上の階層の`Makefile.am'はSUBDIRSマクロを含むだろうが、 構築されるオブジェクトを定義するための他のマクロは含まない。

shallowパッケージは主要なソースが一番上の階層のディレクトリにある が、さまざまな部分(典型的にはライブラリ)がサブディレクトリにあるような ものである。Automakeは(GNU make、それは現在automakeを使っ ていないが、それと同じく)そのようなパッケージの一つである。


2.3 厳密さ

AutomakeはGNUパッケージの管理者によって使われることを意図しているが、そ れを使いたいけどGNUの慣習を全て使いたいわけではない人々に便宜をはかるた めに、いくらか努力している。

この目標に対し、Automakeはstrictness--どれぐらい厳密にAutomakeが 標準適合性を点検すべきかを示す正確さ--の三つの階層をサポートしている。

有効なstrictnessの階層は次のようである。

` foreign'

Automakeは適切な操作に絶対に必要とされるものだけを点検するだろう。例えば、 GNU標準は`NEWS'ファイルの存在を命じているけれども、この様式では必要 とされないだろう。その名前はAutomakeはGNUプログラムに対して使われること を意図されているという事実に由来している。これらの緩和された規則は標準的 な様式の操作ではない。

` gnu'

AutomakeはパッケージがGNU標準に一致することを--可能な限りたくさん--点 検するだろう。これがデフォルトである。

` gnits'

Automakeはまだ書かれていないGnits標準に一致することを点検するだろう。こ れらはGNU標準に基いているが、もっと詳細でさえある。あなたがGnits標準の寄 付者でないなら、Gnits標準が実際に公表されるようなときまでこのオプション を避けることが推奨される。

strictnessの階層の精密な意味についてもっと情報を得るために、--gnu--gnitsの影響 を見なさい。


2.4 一定の名付け方

一般的にAutomakeマクロ(以降変数と呼ぶ)はどうプログラム(や他の派生したオブジェクト)が構築さ れ、どうそれらがインストールされるのか決定するのが簡単にする一定の名付け 方に従う。この方法はまた何が構築されるべきかに関するconfigure時の 決定もサポートしている。

makeのときに、特定の変数がどのオブジェクトが構築されるのかを決定 するために使われる。これらは主要な変数と呼ばれる。例えば、主要な変数PROGRAMSはコンパイルされリ ンクされるプログラムのリストを保持する。

異なる変数の組が構築されたオブジェクトがどこにインストールされるべきかを 決めるのに使われる。これらの変数は主要な変数にちなんで名付けられているが、 どの標準ディレクトリがインストールのディレクトリとして使われるべきかを示 す接頭辞を持っている。標準ディレクトリ名はGNU標準(see (standards)Directory Variables section `Directory Variables' in The GNU Coding Standards)で与えられている。 Automakeはこのリストをpkglibdirpkgincludedirpkgdatadirで拡張する。これらは`pkg'でないバージョンと同じだ が、`@PACKAGE@'が追加されている。例えば、pkglibdir$(datadir)/@PACKAGE@と定義されている(2)

各主要変数に対し、主要変数名に`EXTRA_'を頭に付けて名付けられた、追 加の変数がある。この変数はconfigureが決定するものに依存して、構築 されたりされなかったりするオブジェクトを列挙するために使われる。あらゆる 場合に働く`Makefile.in'を生成するために、Automakeは構築されるであろうオブジェ クトのリスト全体を静的に知っていなければならないので、この変数は必要とさ れる。

例えば、cpioはどのプログラムが構築されるか設定時に決定する。プロ グラムの一部はbindirにインストールされるし、一部はsbindir にインストールされる。

 
EXTRA_PROGRAMS = mt rmt
bin_PROGRAMS = cpio pax
sbin_PROGRAMS = @PROGRAMS@

(PROGRAMSのように)接頭辞なしに主要な変数を定義するのは誤りである。

変数名を組み立てるとき、共通の`dir'接尾辞が除かれることに注意せよ。 こうして`bin_PROGRAMS'と書き、`bindir_PROGRAMS'とは書かない。

あらゆる種類のオブジェクトがあらゆるディレクトリにインストールされ得るわ けではない。Automakeはエラーになる、そのような試みを止めるだろう。 Automakeはまたディレクトリ名の明らかな綴り違いを診断するだろう。

ときどき標準のディレクトリは--Automakeによって補強されてさえ--十分ではな い。とりわけ、明瞭さのために、ある先に定義されたディレクトリのサブディレ クトリにオブジェクトをインストールすることがときどき有用である。この目的 のために、Automakeは可能なインストール用ディレクトリのリストを拡張できる ようにしている。任意の接頭辞(例えば`zar')はもし`dir'が付けられ た同じ名前の変数が定義されていれば(例えばzardir)有効である。

例えば、HTMLサポートがAutomakeの一部となるまで、生のHTML文書をインストー ルために次のように使用できる。

 
htmldir = $(prefix)/html
html_DATA = automake.html

特別な接頭辞`noinst'は問題となっているオブジェクトが全くインストー ルされるべきでないことを表す。

特別な接頭辞`check'は問題となっているオブジェクトがmake checkコマンドが走らされるまで構築されるべきでないことを表す。

可能な主要名は`PROGRAMS'、`LIBRARIES'、`LISP'、 `SCRIPTS'、`DATA'、`HEADERS'、`MANS'、そして `TEXINFOS'である。


2.5 派生した変数の名付け方

ときどきMakefile変数名はユーザが与えるあるテキストに由来している。例えば、 プログラム名はMakefileマクロ名に書き直される。Automakeはこのテキストが Makefileマクロ名の規則に従わなくても良いように、それを正規化する。マクロ参 照を行うとき、英字、数字、アンダースコアを除く、その名前の全ての文字がア ンダースコアに変換される。例えば、もしあなたのプログラムが sniff-glueと名付けられているなら、派生する変数名は sniff_glue_SOURCESで、sniff-glue_SOURCESではない。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.