前項では、configure.acのAC_CONFIGU_FILESマクロでmakefileを指定することでconfigureスクリプトにmakefileを生成するよう指示をしました。configureスクリプトを実行すると最後のAC_OUTPUTマクロ経由でmakefileが生成されます。しかしながら、configureスクリプトはスクラッチからmakefileを生成するのではありません。makefile.inという雛形ファイルを入力としてしてmakefileを生成します。そのため、configureスクリプトの実行時にはmakefile.inファイルをあらかじめ作成しておく必要があるわけです。
makefile.inの形式は普通のmakefileを作成するのと特に変わりはありませんが、configureスクリプトで生成された変数を参照するにはその変数を@で囲むことが必要です。例えば、configureスクリプトで生成されたCFLAGS変数を参照するには
CFLAGS=@CFLAGS@
のように記述することでmakefile生成時に、@CFLAGS@の部分が実際の値に置換されます。
makefileが参照する変数には、
などがあります。makefile.in作成する場合、これらの変数にconfigureスクリプトが生成した値(通常、makeの参照する変数と同名の@VARIABLES@)を与えます。例えば、典型的なmakeファイルを生成するmakefile.inは
CC=@CC@
CPPFLAGS=@CPPFLAGS@
:
sample.o:sample.cpp
$(CC) $(CFLAGS) -c sample.cpp
:
のようにに記述します。これで、configureスクリプト実行時に確定したコンパイラやコンパイルオプションがmakefileに反映されることになります。
ところで、上記のmakefile.inサンプルをみてお分かりのようにmakefile.inを手動で作成するのはmakefileを作成するのと大した違いがありません。これでは、autoconfツールのメリットが半減してしまいます。そこでautoconfツール群には、makefile.inを自動生成するツールとしてautomakeが用意されているわけです。このツールを使えば簡単な入力ファイル(makefile.am)を作成するだけでmakefile.in自動生成してくれます。またターゲットのビルドだけでなくmakeで良く使う一般的なターゲット(clean/install/dist/...)も生成しますのでパッケージを統一的に操作することが出来る点も大きなメリットと言えると思います。