再帰的な Makefile は害だ2008年05月06日 15時46分07秒

Recursive Make Considered harmful という論文を見つけた。見たところ1997 年に書かれた論文の様だ。既に、十年が経過している。

要約すると、「よくオープンソースのプロジェクトなどで見られる、各ディレクトリに Makefile を再帰的に置く形式の Makefile は、効率が悪いだけでなく、依存関係も不自然に断ち切ってしまい、Make の本来の意味が失われている。」との事だ。

http://uyota.asablo.jp/blog/ 基本的に私も、この論文の主張と同じ意見で、GNU make で make ファイルを作成などとしている。私の文章からは読み取りづらいが、実際にこの様な Makefile を一つだけプロジェクトの最上位に置き、数十ものプログラムやそれに伴う追加生成物なども現場で使っている。

意見の違いは、Make のルールを動的に作成するか、静的に生成するかだ。動的に生成した方が、融通が効く。

Makefile を再帰的に呼ぶと、Makefile が分割されるので、その間を取り持つ依存関係が分断される。元々依存関係がないのであれば、別々のターゲットとして一つの Makefile に問題なく記述できる。再帰的な構成は、Make を並列処理で実行する場合に問題になりやすい。