make 事情2007年06月08日 10時54分03秒

旧来の make は機能が古すぎて、使い物にならない。sysV-make も似たような物だ。少なくても、make だけである程度の書こうとすると BSD makeGNU make ぐらいの機能は必要だ。

make で何をしたいかにもよる。しかし、make だけで、ビルドの機能を完結させたいのなら、旧来の make ではほぼ不可能だ。何といっても、旧来の make は include などの他のファイルの読み込みの機能と、条件分岐の機能がとても弱い。make だけで、終わらせようとするのがほぼ不可能な位貧弱だ。わざわざ、書き起こしても徒労に終わる。

しかし、旧来型の make だけしか使えない環境もあるかも知れない。その様な時は、make を二段式にする手がある。Makefile から、様々な依存関係や、前処理をして、静的には埋め込めない条件等を埋め込んだ makefile を生成するのがお薦めだ。

.depend などを旧来の make に読み込ませようとすると、ファイルが存在している必要がある。しかし、.depend などを make から作ることは出来ない。そして、cvs などの履歴管理に入れると、間違って他の変更と共に、コミットしてしまう。それなら、割り切って makefile 自体を生成してしまった方が手っ取り早く、普通の make には出来ないことも処理できる様になる。makefile は Makefile よりも優先されるので、出来る業だ。makefile に depend ターゲットを作り、Makefile を呼べるようにしておく。Makefile は depend 専用だ。その変わり、シェルスクリプトなどを使って、makefile を生成出来るようにする。

BSD make や GNU make になると条件式が使えるので、それなりの事が出来るようになる。BSD の ports system などを見ればわかるように、かなりの事が出来るようになる。拡張機能の豊富さを見ると GNU make は更に上をいく。Makefile の自動修正や、マクロの多段展開、拡張された各種マクロ値の編集機能、vpath などの、拡張機能を使うと make だけで、物凄いことが出来るようになる。automake や autoconf などを使うよりもよっぽど早く、しっかり処理できる。