Next: Third-Party Makefiles, Up: Not Enough
(_PROGRAMS
のような変数は$(EXEEXT)
が追加されて書き直され
るといった)わずかな例外はありますが,Makefile.amの内容は
Makefile.inにそのままコピーされます.
これらのコピーの意味は,単純にいくつかのmake
変数とルールを
Makefile.amに追加することで,多くの問題が解決可能だということを
意味します.Automakeはこれらの追加を無視します.
Makefile.inは,三つの異なる場所(Makefile.am,
configure.ac,そしてautomake自身)からデータを集めてビ
ルドされるので,ルールや変数の定義が衝突する可能性があります.
Makefile.inをビルドするとき,ユーザが最後の単語を利用することを
保証するために,automakeに関連する優先順位に従います.
Makefile.amでユーザが定義した変数は,configure.acで
AC_SUBST
した変数より優先され,AC_SUBST
された変数は
automakeが定義した変数より優先されます.同様にルールも関連し
て,ユーザ定義のルールはautomakeが定義した同じターゲットに対
するルールに優先されます.
これらのオーバーライドの意味は,Automakeのデフォルトの設定をうまく調整
したり,そのルールを置換することを可能にします.Automakeのルールをオー
バーライドすることはあまり勧められず,特にサブディレクトリがあるパッケー
ジの最上位のディレクトリではそうです.-Woverride
オプション
(see Invoking Automake)で,オーバーライドしている定義が簡単に捕え
られます.
Automakeには,コマンドを用いたルールと依存性を指定するだけのルールに差
異がないことに注意して下さい.automake
が定義したターゲットに,
ルール全体を定義することなく新しい依存性を追加することは不可能です.
しかし,様々な有用なターゲットには,Makefile.inで指定可能な, ‘-local’バージョンがあります.Automakeはこれらのユーザが提供する ターゲットを用いて標準ターゲットを補足します.
ローカルバージョンをサポートするターゲットは,all
,info
,
dvi
,ps
,pdf
,html
,check
,
install-data
, install-exec
,uninstall
,
installdirs
,installcheck
,そして様々なclean
ター
ゲット(mostlyclean
,clean
,distclean
,そして
maintainer-clean
)です.uninstall-exec-local
や
uninstall-data-local
ターゲットが無いことに注意してください.
uninstall-local
だけを使用してください.データだけ,あるいは実行
可能プログラムだけをアンインストールすることには意味がありません.
例えば,ファイルを/etcにインストールする一つの方法は,以下のよ うになります.
install-data-local: $(INSTALL_DATA) $(srcdir)/afile $(DESTDIR)/etc/afile
ルールには,hookと呼ばれる,その仕事が終った後にもう一つのルール
を実行する方法もあります.フックは,主要なターゲットに‘-hook’ を
追加して命名します.フックが可能なターゲットは,install-data
,
install-exec
,uninstall
,dist
,そして
distcheck
です.
例えば,インストールしたプログラムにハードリンクを作成する方法は,以下
のようになります.
install-exec-hook: ln $(DESTDIR)$(bindir)/program$(EXEEXT) \ $(DESTDIR)$(bindir)/proglink$(EXEEXT)
安っぽいけれど,シンボリックリンクより移植性の高いハードリンクは,どこ
ででも動作するわけではありません(例えば,OS/2にはlnがありま
せん).理想としては,ln
が動作しないときはcp -p
に逆戻りす
べきです.簡単な方法は,シンボリックリンクを受け入れる場合,
configure.acにAC_PROG_LN_S
を追加し(see Particular Program Checks),
Makefile.amで$(LN_S)
を使用して下さい.
例えば,以下では,$(LN_S)
を用いてプログラムのコピーバージョンの
インストールを可能にする方法です.
install-exec-hook: cd $(DESTDIR)$(bindir) && \ mv -f prog$(EXEEXT) prog-$(VERSION)$(EXEEXT) && \ $(LN_S) prog-$(VERSION)$(EXEEXT) prog$(EXEEXT)
我々は,新しいバージョンがシンボリックリンクを削除し,本当のバイナリを
削除しないように,プログラムの名前を変更していることに注意して下さい.
また,我々は,相対リンクを作成するため,コピー先のディレクトリに
cd
しています.