次: , 前: A Shared Library, 上: Programs


7.4 プログラムとライブラリの変数

それぞれのプログラムに関連して,プログラムのビルドの方法を修正するため に使用可能な変数の集合があります.それぞれのライブラリに対しても,それ に似たような変数のリストがあります.プログラム(やライブラリ)の標準的な 名前が,これらの変数の命名に対してベースとして使用されます.

以下のリストでは,名前“maude”をプログラムやライブラリを示すものとし て使用しています.Makefile.amで,これをプログラムの標準的な名前 に置換してください.このリストは,“maude”をプログラムを示すものとし ていますが,一般的に同じルールを,スタティックライブラリやダイナミック ライブラリに適用します.以下の文章では,プログラムとライブラリで異なる 状況をコメントしています.

`maude_SOURCES'
存在する場合,この変数は,プログラムをビルドするためにコンパイルされる, すべてのソースファイルをリストアップします.プログラムをビルドしている とき,Automakeはそれぞれのソースファイルを単一の.oファイル(や libtoolを使用しているときは.lo)にコンパイルさせます.通常これら のオブジェクトファイルはソースファイルの後に命名されますが,他の要因で 変更することが可能です.`_SOURCES'変数のファイルに認識できない拡 張子がある場合,Automakeは二つのうちの一つを実行します.認識できない拡 張子を持つファイルを.oに変換するためのサフィックスルールが存在 する場合,automakeはこのファイルを,その他の(言語の)ソースファイルとし て扱います(see Support for Other Languages).それ以外では,ファイ ルがヘッダファイルと考えて無視されます.

接頭辞の`dist_'と`nodist_'で,`_SOURCES'にリストアップ されているファイルを配布するかどうか制御するために使用することが可能で す.ソースはデフォルトで配布されるので,`dist_'は冗長ですが,必要 があれば明確にするために指定可能です.

`_SOURCES'変数に与えるものとして`dist_'と`nodist_'の両 方を一度に用いることが可能です.これによって,配布するファイルとしない ものに簡単に分類することができ,例えば以下のようにします.

          nodist_maude_SOURCES = nodist.c
          dist_maude_SOURCES = dist-me.c
     

デフォルトで,出力ファイル(Unixシステム上では.oファイル)は,現 在のビルドディレクトリに書き込まれます.しかし,現在のディレクトリに対 してオプションのsubdir-objectsの影響がある場合,.oファイ ルはソースファイルの後で指名されるサブディレクトリに書き込まれます.例 えば,subdir-objectsが利用可能な場合,sub/dir/file.csub/dir/file.oにコンパイルされます.この処理モードを好む人もい ます.subdir-objectsAUTOMAKE_OPTIONSで指定することが可 能です(see Options).

`EXTRA_maude_SOURCES'
Automakeは,コンパイルしたいファイルのリストを静的に知っている 必要があります.一つには,該当するMakefile.inが要求する言語のサ ポートの種類をAutomakeが知るための唯一の方法だということがあげられます. 1例えばこれには,`@my_sources@'のようなconfigureの置換 式を`_SOURCES'に書き込むことができないという意味があります.ソー スファイルの条件コンパイルを行ない,例えば`_LDADD'(以下を参照して ください)のオブジェクト名を適切に置換するためにconfigureを使用 したい場合,対応するソースファイルを`EXTRA_'にリストアップした方 が良いでしょう.

この変数は,例えば`nodist_EXTRA_maude_SOURCES'のように, `dist_'と`nodist_'もサポートします.

`maude_AR'
スタティックライブラリは,デフォルトで,$(AR) $(ARFLAGS)にライ ブラリ名とライブラリに書き込むオブジェクトを続けて呼び出すことで作成さ れます.`_AR'変数でこれに優先することが可能です.これは,通常C++ で使用されます.C++コンパイラには,ライブラリに組み込むすべてのテンプ レートを生成するために,特殊な呼び出しが必要なものもあります.例えば, SGI C++コンパイラは,この変数を以下のように設定します.
          libmaude_a_AR = $(CXX) -ar -o
     

`maude_LIBADD'
`_LIBADD'変数を使用することで,追加のオブジェクトをライブラ リに加えることが可能です.例えばこれは,configureで決定される オブジェクトに対して使用すべきです(see A Library).
`maude_LDADD'
`_LDADD'変数に追加のオブジェクトをリストアップすることで, プログラムに加えることが可能です.例えばこれは, configureで決定されるオブジェクトに対して使用すべきです (see Linking).

(`-l',`-L',`-dlopen',そして`-dlpreopen'以外の) プログラム特有のリンカフラグを渡すために`_LDADD'と`_LIBADD' を使用することは不適切です.この目的に対しては,`_LDFLAGS'変数を 使用してください.

例えば,configure.acAC_PATH_XTRAを使用している場合,X のライブラリに対してプログラムをリンクするため,以下のようにすることが 可能でしょう.

          maude_LDADD = $(X_PRE_LIBS) $(X_LIBS) $(X_EXTRA_LIBS)
     

`maude_LDFLAGS'
これは,プログラムや共有ライブラリのリンク段階に特別なフラグを渡すため に使用する変数です.
`maude_DEPENDENCIES'
実際には,プログラムの一部にはならない他のターゲットに依存するプログラ ムがあることが,役に立つ場合もあります.これは,`_DEPENDENCIES'変 数を使用することで可能になります.それぞれのプログラムは,その変数の内 容に依存しますが,それ以上に解釈されません.

`_DEPENDENCIES'が提供されていない場合,それはAutomakeが考慮します. 自動的に割り当てられる値は`_LDADD'や`_LIBADD'の内容で,ほと んどのconfigure置換式,`-l',`-L',`-dlopen', `-dlpreopen',そして`-dlpreopen'オプションは削除されています. 残っているconfigureの置換式は,`$(LIBOBJS)'と`$(ALLOCA)'です. これらは,生成される`_DEPENDENCIES'に対して無効な値を生成しないこ とが分かっているので残されます.

`maude_LINK'
プログラムごとを基本として,(デフォルトの)リンカに優先することが可能で す.デフォルトで,プログラムで使用されている言語によってリンカは選択さ れます.例えば,C++のソースコードを含むプログラムでは,C++コンパイラが リンクに使用されます.`_LINK'変数は,すべての.oファイル名 を引数として渡すことが可能なコマンドの名前を含んでいる必要があります. 基礎となるプログラム名は,`_LINK'に渡されないことに注意し てください.通常は`$@'を使用します.
          maude_LINK = $(CCLD) -magic -o $@
     

`maude_CCASFLAGS'
`maude_CFLAGS'
`maude_CPPFLAGS'
`maude_CXXFLAGS'
`maude_FFLAGS'
`maude_GCJFLAGS'
`maude_LFLAGS'
`maude_OBJCFLAGS'
`maude_RFLAGS'
`maude_YFLAGS'
Automakeでは,プログラムごと(またはライブラリごと)を基本として,コンパ イルフラグを設定することが可能です.単一のソースファイルを複数のプログ ラムに含めることが可能で,それぞれのプログラムに対して異なるフラグでコ ンパイルされる可能性もあります.これは,あらゆる言語に対し,直接 Automakeがサポートすることで動作します.これらのターゲットごとの コンパイルフラグ(per-target compilation flags)は,`_CCASFLAGS', `_CFLAGS',`_CPPFLAGS',`_CXXFLAGS',`_FFLAGS', `_GCJFLAGS',`_LFLAGS',`_OBJCFLAGS',`_RFLAGS', そして`_YFLAGS'です.

ターゲットごとのコンパイルフラグを使用するとき,Automakeは,中間的なオ ブジェクトファイルに対して異なる名前を選択します.通常, sample.cのようなファイルは,コンパイルされてsample.oが生 成されます.しかし,プログラムの`_CFLAGS'変数を設定した場合,オブ ジェクトファイルは,例えばmaude-sample.oのように命名されます. (renamed objectsも参照して下さい.)

ターゲットごとにフラグを用いてコンパイルする際は,通常の`AM_'形式 のフラグ変数は自動的にコンパイルに組み込まれません(しかし,ユー ザ形式の変数は組み込まれます).そのため,例えば, `AM_CFLAGS'の変数も使用してmaudeのコンパイルを行なうと仮定 すると,以下のように書く必要があります.

          maude_CFLAGS = ... your flags ... $(AM_CFLAGS)
     

`maude_SHORTNAME'
利用可能なファイル名が非常に短いプラットフォームもあります.これらのシ ステムと,ターゲットごとのコンパイルフラグを同時にサポートするために, Automakeでは,中間的なオブジェクトファイルの命名方法に影響する“短い名 前”を設定することが可能です.例えば,以下の例のようにします.
          bin_PROGRAMS = maude
          maude_CPPFLAGS = -DSOMEFLAG
          maude_SHORTNAME = m
          maude_SOURCES = sample.c ...
     

オブジェクトファイルはmaude-sample.oではなくm-sample.oと 命名されます.

この機能は,実行上滅多に必要になりませんし,要求されていることが分かる まで使用を避けることを推奨します.


脚注

[1] それ以外にも,この制限に対してあまり知られていない理由も存在 します.