Next: Standard Targets, Previous: Command Variables, Up: Makefile Conventions
インストール命令は常に変数によって名前が付けられているべきだ。だから、標 準的でない場所にインストールするのは簡単である。これらの変数の標準的な名 前は以下で述べる。それらは標準的なファイルシステムの構造に基いている。そ れに似たものがSVR4、4.4BSD、Linux、Ultrix v4や他の現代的なオペレーティン グ・システムで使われている。
これらの二つの変数はインストールのためのルートを設定する。他のインストー ル命令はすべてこれら二つのうちの一つのサブディレクトリであるべきで、これ ら二つのディレクトリへ直接インストールされるものがあるべきではない。
prefixのデフォルトの値は/usr/localであるべきだ。完全なGNU
システムを構築するとき、接頭辞は空で、/usrは/へのシンボリッ
ク・リンクになるだろう。(もしAutoconfを使っているなら、それを
‘@prefix@’と書きなさい。)
exec_prefixのデフォルトの値は$(prefix)であるべきだ。(もし
Autoconfを使っているなら、それを‘@exec_prefix@’と書きなさい。)
一般的に、$(exec_prefix)は(実行ファイルやサブルーチン・ライブラリ
のような)マシンに特定のファイルを含むディレクトリに対して使われるが、
$(prefix)は他のディレクトリに対して直接使われる。
実行プログラムは以下のディレクトリの一つにインストールされる。
実行中にプログラムによって使われるデータ・ファイルは二つの方法の部類に分 けられる。
これは6つの異なる可能性をもたらす。しかしながら、我々は、オブジェクト・ ファイルやライブラリは別にして、アーキテクチャ依存のファイルの使用をやめ させたい。他のデータ・ファイルをアーキテクチャ非依存にすることはずっとき れいで、普通は困難ではない。
それゆえ、ここにMakefileがディレクトリを指定するのに使うべき変数を挙げる。
このディレクトリに実行ファイルをインストールしてはいけない(それらおそら
く$(libexecdir)か$(sbindir)に属する)。また、普通の方針で使っ
ているときに変更するファイルはインストールしてはいけない(システムの設定
を変更するための目的のプログラムは除く)。それらはおそらく
$(localstatedir)に属する。
libdirの値は普通
/usr/local/libだが、それを$(exec_prefix)/libと書きなさい。
(もしAutoconfを使っているなら、それを‘@libdir@’と書きなさい。)
もしAutoconfを使っているなら、デフォルトを‘@lispdir@’と書きなさい。 ‘@lispdir@’が働くようにするために、configure.inファイルに 以下の行が必要である。
lispdir='${datadir}/emacs/site-lisp'
AC_SUBST(lispdir)
GCC以外のほとんどのコンパイラは/usr/local/includeディレクトリのヘッ
ダ・ファイルを探さない。だからこの方法でヘッダ・ファイルをインストールす
ることはGCCにだけ役に立つ。一部のライブラリはGCCで働くことだけを本当に意
図しているので、これは時には問題ではない。しかし一部のライブラリは他のコ
ンパイラと働くことを意図している。それらはヘッダ・ファイルを二つの場所、
includedirに指定されるところとoldincludedirに指定されると
ころにインストールするべきだ。
Makefileのコマンドはoldincludedirの値が空かどうか確認すべきだ。も
しそうなら、それを使おうとするべきではない。ヘッダ・ファイルの二番目のイ
ンストールを取りやめるべきだ。
パッケージはこのディレクトリにすでにあるヘッダを、そのヘッダが同じパッケー
ジに由来しているのでないなら、置き換えるべきではない。だから、もしあなた
のFooパッケージがヘッダ・ファイルのfoo.hを提供するなら、もし、
(1)foo.hがないか、(2)すでにあるfoo.hがFooパッケージ由来か、
のどちらかなら、oldincludedirディレクトリにそのヘッダ・ファイルを
インストールするべきだ。
foo.hがFooパッケージ由来かどうかを見分けるために、そのファイルに
魔法の文字列—コメントの一部—を置き、その文字列をgrepしなさい。
Unix形式のmanページは次のうちの一つにインストールされる。
そして最後に、以下の変数を設定するべきだ。
configure
シェル・スクリプトによって挿入される。(もしAutoconfを使っているなら、
‘srcdir = @srcdir@’を使いなさい。)
例。
# Common prefix for installation directories.
# NOTE: This directory must exist when you start the install.
prefix = /usr/local
exec_prefix = $(prefix)
# Where to put the executable for the command `gcc'.
bindir = $(exec_prefix)/bin
# Where to put the directories used by the compiler.
libexecdir = $(exec_prefix)/libexec
# Where to put the Info files.
infodir = $(prefix)/info
もしあなたのプログラムが標準的なユーザ指定のディレクトリに、非常にたくさ
んのファイルをインストールするなら、このプログラムに特定のサブディレクト
リにそれらをまとめると有用かもしれない。もしこうするなら、これらのサブディ
レクトリを作るためのinstall規則を書くべきだ。
上に挙げたどの変数の値にも、ユーザがサブディレクトリの名前を含めると期待し てはいけない。インストール・ディレクトリのための変数名の一組を持つという 考えは、ユーザがいくつかの異なるGNUパッケージに正確に同じ値を指定できる ようにすることである。これを有用なものとするために、あらゆるパッケージは ユーザがそうするときに賢く働くように設計されなければならない。