次: , 前: Preset Output Variables, 上: Makefile Substitutions


4.7.2 インストールディレクトリの変数

以下の変数は,パッケージがインストールされる場所を指定します.詳細は, Variables for Installation Directoriesを参照してください.これら の変数を使用するときとその方法の詳細は,このセクションの終りを参照してく ださい.

— 変数: bindir

ユーザが実行する実行形式をインストールするディレクトリです.

— 変数: datadir

読み込み専用のアーキテクチャに依存しないデータをインストールするディレク トリです.

— 変数: exec_prefix

アーキテクチャに依存するファイルをインストールするプレフィクスです.デフォ ルトはprefixと同じです.exec_prefixにいろいろなものを直接イ ンストールすることは避けた方が良いでしょう.しかし,アーキテクチャに依存 するファイルを含むディレクトリに対するデフォルト値は,exec_prefix から相対的なものにすべきです.

— 変数: includedir

Cヘッダファイルをインストールするディレクトリです.

— 変数: infodir

Info形式のドキュメントをインストールするディレクトリです.

— 変数: libdir

オブジェクトコードライブラリをインストールするディレクトリです.

— 変数: libexecdir

他のプログラムが実行する,実行可能なプログラムをインストールするディレク トリです.

— 変数: localstatedir

修正可能なシングルマシンのデータをインストールするディレクトリです.

— 変数: mandir

man形式のドキュメントをインストールするトップレベルのディレクトリです.

— 変数: oldincludedir

GCCコンパイラ以外のためのCヘッダファイルをインストールするディレクトリで す.

— 変数: prefix

全てのファイルに対する共通のインストールプレフィクスです. exec_prefixが異なる値で定義されている場合,prefixはアーキテ クチャ非依存ファイルに対してのみ使用されます.

— 変数: sbindir

システム管理者が実行する実行形式をインストールするディレクトリです.

— 変数: sharedstatedir

修正可能な,アーキテクチャに依存しないデータをインストールするディレクト リです.

— 変数: sysconfdir

読み込み専用の,シングルマシンのデータをインストールするディレクトリです.

これらの変数のほとんどは,prefixexec_prefixに依存する値 になります.ディレクトリ変数の出力値が展開されないように考慮されています. 典型的な例として,`@datadir@'は,`/usr/local/share' ではなく `${prefix}/share'に置換されます.

以下の動作は,GNU coding standardsで示されれていて,ユーザが実 行時にそうなるようになっています.

`make'
configureに指定されるものとは異なるプレフィクスを指定すること がまだ可能で,その場合に必要があれば,パッケージはmakeで指定されているプ レフィクスに対応するように依存性がハードコード化されます.
`make install'
異なるインストール位置を指定することが可能で,その場合,パッケージはコン パイルで指定した場所に,まだ依存しているはずです(すなわち, `make install'を実行するときは再コンパイルされません).お互いにグルー プ化された全てのファイルを,インストール時に決定する人も多いので,これは 非常に重要な特徴で,そこからインストール後に最終的な場所にリンクが張られ ます.

これらの機能をサポートするために,datadirprefixの現在の 値に依存する`${prefix}/share'として定義されたままになっていること が重要です.

当然のことですが,これらの変数をMakefilesで使用すべきではありませ ん.例えば,configuredatadirを評価する代わりに, Makefileで,例えば`AC_DEFINE_UNQUOTED(DATADIR, "$datadir")' としてハードコードする場合は,`-DDATADIR="$(datadir)"'を CPPFLAGSに加えるべきです.

同様に,datadirとその仲間を,シェルスクリプトやその他のファイルで 置換するために,AC_OUTPUT_FILESに頼るべきではなく,その代わりに makeにその置換を行なわせてください.例えば,Autoconfは `.in'で終るシェルスクリプトのテンプレートを配布していて,以下のよう なMakefileの一部を使用しています.

     edit = sed \
             -e 's,@datadir\@,$(pkgdatadir),g' \
             -e 's,@prefix\@,$(prefix),g'
     
     autoconf: Makefile $(srcdir)/autoconf.in
             rm -f autoconf autoconf.tmp
             $(edit) $(srcdir)/autoconf.in >autoconf.tmp
             chmod +x autoconf.tmp
             mv autoconf.tmp autoconf
     
     autoheader: Makefile $(srcdir)/autoheader.in
             rm -f autoheader autoheader.tmp
             $(edit) $(srcdir)/autoconf.in >autoheader.tmp
             chmod +x autoheader.tmp
             mv autoheader.tmp autoheader

注目すべきことがいくつかあります.

`@datadir\@'
バックスラッシュでconfigureが`@datadir@'をsedの式自身に 置換することを妨げます.
`$(pkgdatadir)'
`@pkgdatadir@'を使用しないでください! 代わりに,makefile変数のマッ チングを使用してください.
`,'
`$(pkgdatadir)'のように`/'を含んでいる変数を使用することもある ので,sedの式で`/'を使用しないでください.
`Makefileへの依存性'
editは,コンフィグレーション特有の値(prefix等)に依存し, VERSIONやそれの以前のものには依存しない値を使用するので,出力は configure.acではなくMakefileに依存します.
`依存性の分割と単一のサフィックスルール'
それらを使用することは不可能です!上記の断片を,(おそらく)以下のように書 き換えることは不可能です.
          autoconf autoheader: Makefile
          .in:
                  rm -f $@ $@.tmp
                  $(edit) $< >$@.tmp
                  chmod +x $@.tmp
                  mv $@.tmp $@
     

詳細は,See Limitations of Make.

``$(srcdir)''
ソースへのパスを確実に指定し,そうしない場合はパッケージは分割ビルドをサ ポートしないでしょう.