make make make make2006年07月09日 12時11分53秒

最近、唱えている呪文。 負け負け負け負け。遂におかしくなったわけではない。「make make make make」が make の力を引き出すのに、最適かも知れないと悟ったのだ。

まあ、make ファイルを書いていて、呟いたりするのがこれだ。make make make make と。ふと悲惨な翻訳を読んだ後に気が付いた。「make make make make」は文章だったと!そして、これが今開発中のシステムを構築するのに使われている、make ファイルを書いたときの指針なのである。念の為に書いておくが、これはコマンドラインに打ち込む文字列ではない。

make 自体の限界は最近感じ始めてはいるが、まだまだいい代替品が見つかってはいない。もし、あったとしても移植する手間を考えるとあまり乗り気にはならなかったりもする。

一部で GNU make を使っている。GNU make ではかなりの拡張を行なっているので、これまた変わった動作を示すときがある。それでも今の OS 上で使えるのが GNU make のみなので、折角だからと GNU make の特徴を最大限に引き出すように基幹の make ファイルを書いた。

結果は大成功だった。いくつか気になる点は残っているが、今のままでもシステムの構築には多大な恩恵をもたらしている。個人的には 98% の出来だ。あとの 2% はある変数を変えたときの自動再構築。まあ、こちらはなくても困りはしないが。

なお、今の GNU make で作成した構築システムは make が make ファイルを作るところから始まる。依存関係を make 自らが構築するのだ。「make make make make」をやっている。

「make make make make」としか書かないと、やはりおかしくなっただけではと思われてしまうので、解説する。まずは単語を置換する。「let make build make」となった。これで少々わかっただろうか。「make に make ファイルを作らせてしまおう」とのことだ。let や make の後に名詞と動詞を置き、「名詞に動詞をさせる」という意味になる。このとき、動詞は原型になる。「let the dog go.」で「犬を放しなさい。」または「犬を行かせなさい。」の意味になる。それゆえ、このような文でも文法的にも正しいだ。

元が make などなかった環境なので、make ファイルを書くときに、本来のシステムに変更があったときでも make ファイルを変更する必要がないようにしたかった。make を書いていたのは、コンパイルを待つ時間だったのだ。それ故、make のファイル自体にはあまり時間をかけたくなかった。その結果、 make が既存の設定ファイルを読み、make で使えるように変換した後に、目標のプログラムを構築するようになった。

実際に出来てみるととてもいい塩梅に出来上がった。基本的に make ファイルに書いてあるのは、.c から .o といった基本的かつ一般的な依存関係と処理の仕方だけである。処理自体が少々特殊な部分も出来たが、対象のシステムをどれだけいじっても、一切 make 自体には変更がいらない。ソースファイルが増えても、プログラムが増えても make が自動的に検出し、make ファイルを書いてくれるのである。

もし隣の席でブツブツ「make make make make」と呟く人がいたら、make がうまく書けないで困っている人ではない。恐らく make に make ファイルを作らせるのが、とても有効な手だと気が付いた人なのであるから。恐らく、画新的な make ファイルを書いている最中なのであろうと。