Makefile の流儀2006年11月04日 12時59分47秒

GNU 関連のソフトウェアに限らず、make を使うプロジェクトは多い。

一つのパッケージの中に複数のディレクトリがあり、その各々の中に configure で Makefile を作るものが、そのほとんどのようだ。そして、各ディレクトリに移動して、make を実行するものが、ports をコンパイルしていると、ほぼ全てに見受けられるように思う。

ports の様に全く違うソフトウェアを同じ枠組上で、コンパイルするために使う方法としては最適だとは思う。しかし、一つの生成物を作成するのには、向かないと思うようになってきた。

何せ、cd && make をするので環境変数が渡しづらい。また、make に与えられた引数もうまく渡せないことも多い。特定の make なら、渡せる場合もあるが、色々な make のバージョンで動かそうとすると、あっと言うまに壁にぶつかる。ループをして、cd && make をやったら、それこそ目的のものだけを作るのは、とても難しくなる。

それよりも、一番上のディレクトリに一つだけ、Makefile を置いて、そこから全ての依存関係とつくり出すプログラムを全て含ませた方が使い勝手がいい。

最近、Makefile を書いていて思うことだ。

autoconf や libtool などの様な、Makefile 生成を手伝う道具もあるが、何年も前に使ってみて失望した。色々と、ライブラリなどが存在するか見ているので、見つからなかったら、自動的に振り替えたりするのかと思ったが、それは結局 autoconf の書き方次第だった。とても、力技なのが印象的だった。