makefile.amの構文

さすがにmakefile.amを自動生成するツールはありませんからこのファイルは手動で作成します。といっても最低限必要な記述はmakefile/makefile.inを作成するよりずっと少ないので手間は大幅に少なくてすみます。

makefile.amではターゲットとそのインストール場所を特殊な変数名として次のような形式で指定します。

接頭辞_プライマリ=ターゲット

ここで接頭辞とは通常インストールするディレクトリを示すキーワードを、そしてプライマリにはターゲットの種類を指定します。プライマリはターゲットがビルドを必要とするかしないかにより大きく2つに分類されます。

ビルド処理が必要となるプライマリとしては

インストールのみのプライマリとしては

があります。名前からわかるように、いわゆるプログラム・ライブラリをターゲットに指定する場合は、当然ながらビルドが必要ですのでプライマリPROGRAMS/LIBRARIESに指定します。それ以外の各ドキュメントやデータはビルドの必要がありませんのでそれ以外のプライマリを指定することになります。

プライマリにはそのターゲットのインストール先として接頭辞を付与しますが、これはconfigureオプションを展開する変数からdirの部分を除去した以下の名称を使用します。

ターゲットの派生定義

ビルドの必要なプライマリ(ターゲット)を定義した場合、ビルドするプログラムやコンパイル・リンクオプションなどターゲットをビルドするために必要な情報を派生定義する必要がでてきます。これらはターゲット名_接尾辞という形式で指定します。接尾辞の種類として下記が使用頻度が高いと思います

SOURCES
ターゲットが依存するソースファイルリスト。複数ある場合はスペース区切りで列挙します。
LIBADD
追加するオブジェクトファイルリスト。
LDADD
リンクするライブラリリスト。
CFLAGS/CPPFLAGS
C/C++コンパイラのビルドオプション
LDFLAGS
リンカオプション。

例えば、hello.c、hello.hからなるhelloパッケージのためのmakefile.amは

bin_PROGRAMS=hello
hello_SOURCES=hello.c hello.h

として記述できます。