[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
以下の節ではAutomakeがどう働くかを理解するのを助ける、2、3の基本的な概念を カバーする。
2.1 全般的な操作 | Automakeの全般的な操作 | |
2.2 深さ | ||
2.3 厳密さ | ||
2.4 一定の名付け方 | ||
2.5 派生した変数の名付け方 |
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 |
automake
は三つの種類のディレクトリ階層、`flat'、`shallow'、そ
して`deep'をサポートする。
flatパッケージは全てのファイルが単一のディレクトリにあるようなもの
である。そのようなパッケージの`Makefile.am'は定義により
SUBDIRS
マクロがない。そのようなパッケージの例はtermutils
で
ある。
deepパッケージは全てのソースがサブディレクトリにあるようなものであ
る。その一番上の階層のディレクトリは主に設定情報を含んでいる。GNU cpio
は
GNU tar
と同じく、そのようなパッケージの良い例である。deepパッケー
ジの一番上の階層の`Makefile.am'はSUBDIRS
マクロを含むだろうが、
構築されるオブジェクトを定義するための他のマクロは含まない。
shallowパッケージは主要なソースが一番上の階層のディレクトリにある
が、さまざまな部分(典型的にはライブラリ)がサブディレクトリにあるような
ものである。Automakeは(GNU make
、それは現在automake
を使っ
ていないが、それと同じく)そのようなパッケージの一つである。
AutomakeはGNUパッケージの管理者によって使われることを意図しているが、そ れを使いたいけどGNUの慣習を全て使いたいわけではない人々に便宜をはかるた めに、いくらか努力している。
この目標に対し、Automakeはstrictness--どれぐらい厳密にAutomakeが 標準適合性を点検すべきかを示す正確さ--の三つの階層をサポートしている。
有効なstrictnessの階層は次のようである。
Automakeは適切な操作に絶対に必要とされるものだけを点検するだろう。例えば、 GNU標準は`NEWS'ファイルの存在を命じているけれども、この様式では必要 とされないだろう。その名前はAutomakeはGNUプログラムに対して使われること を意図されているという事実に由来している。これらの緩和された規則は標準的 な様式の操作ではない。
AutomakeはパッケージがGNU標準に一致することを--可能な限りたくさん--点 検するだろう。これがデフォルトである。
Automakeはまだ書かれていないGnits標準に一致することを点検するだろう。こ れらはGNU標準に基いているが、もっと詳細でさえある。あなたがGnits標準の寄 付者でないなら、Gnits標準が実際に公表されるようなときまでこのオプション を避けることが推奨される。
strictnessの階層の精密な意味についてもっと情報を得るために、--gnu
と--gnits
の影響
を見なさい。
一般的にAutomakeマクロ(以降変数と呼ぶ)はどうプログラム(や他の派生したオブジェクト)が構築さ
れ、どうそれらがインストールされるのか決定するのが簡単にする一定の名付け
方に従う。この方法はまた何が構築されるべきかに関するconfigure
時の
決定もサポートしている。
make
のときに、特定の変数がどのオブジェクトが構築されるのかを決定
するために使われる。これらは主要な変数と呼ばれる。例えば、主要な変数PROGRAMS
はコンパイルされリ
ンクされるプログラムのリストを保持する。
異なる変数の組が構築されたオブジェクトがどこにインストールされるべきかを
決めるのに使われる。これらの変数は主要な変数にちなんで名付けられているが、
どの標準ディレクトリがインストールのディレクトリとして使われるべきかを示
す接頭辞を持っている。標準ディレクトリ名はGNU標準(see (standards)Directory Variables section `Directory Variables' in The GNU Coding Standards)で与えられている。
Automakeはこのリストをpkglibdir
、pkgincludedir
と
pkgdatadir
で拡張する。これらは`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'である。
ときどき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.