Makeの問題点を詳しくかつ具体的に指摘した記事を読んだ。
What’s Wrong With GNU make? - Conifer Systems
http://www.conifersystems.com/whitepapers/gnu-make/
via yendot
暇があったら抄訳したいくらい面白い。以下目次。
- Language Design
- Recursive Make
- The Parser
- Uninitialized Variables and Environment Variables
- Conditional Syntax
- Two Types of Variables
- Pattern Rules and Search Paths
- Other Missing Language Features
- Reliability
- Missing Dependencies
- Last-Modified Timestamps
- Command Line Dependencies
- Environment Variable Inheritance and Dependencies
- Multiple Concurrent Sessions
- Editing Files During a Build
- Cleaning Up Old Files
- Path Canonicalization
- After a Failed or Cancelled Build
- Performance
- Incremental Build Performance
- Recursive Make and Performance
- Parallel Make
- Automatic Dependency Generation with Microsoft Visual C++
- Builtin Rules
- Miscellaneous
- Silence is Golden
- Multi-Target Rules
- Warnings That Should Be Errors
- Creating Output Directories
- Conclusion
いちいちもっとも。自分もmake -C dirで文脈を捨てて再帰的にビルドしているこ とがあったので反省。すぐにSConsやOMakeに移行するわけにいかないので、しば らくはmake、それもGNU Makeを使い続けるだろうけど、理解した上で使わないと いけない。
関連して、いまやクラシックな1998のPeter Miller, “Recursive Make Considered Harmful”を読んでみた。
Recursive Make Considered Harmful
http://miller.emu.id.au/pmiller/books/rmch/
要するに文脈情報が失われるような分断をしちゃだめってこと。
第8章が興味深い。なぜこのような悪い慣習が延々と続けられているのかを考察 している。
8. Literature Survey
…
It is interesting that the problems of recursive make are rarely mentioned in the very books Unix programmers rely on for accurate, practical advice.
-
オリジナルのmakeの論文(1978)では再帰makeには触れていない。
-
GNU makeのマニュアル(1993)では、数箇所で再帰makeに触れている。しかしそ の問題点については書かれていない。
-
Nutshell book(1991)では、再帰makeを全プロジェクトmakeよりも推奨してい る。でもその2段落後の文章では、すべてのファイルを単一のディレクトリに収 めることが良いと述べている。ディレクトリを分けることとMakefileを分ける ことを混同しているようにも読める。
-
BSD makeのチュートリアル(1988)は再帰makeには触れていないけれど、 MakefileとDAGの関係には触れている。
同じようなことを自分もやりかねないので耳と心が痛い。読み手からのフィード バックがすぐに書き手に伝わって、楽に直せる仕組みがあればいいのに。
Other Articles
- 13 Oct 2017: 『テスト駆動開発』
- 19 Oct 2016: 『新装版 達人プログラマー 職人から名匠への道』
- 19 Aug 2016: 『プログラミングElixir』
- 20 Oct 2015: Migrating from git-media to git-lfs
- 04 Oct 2015: Git Large File Storageクライアントのインストール
- 12 Aug 2015: isbn.rb
- 22 Apr 2015: 「なるのか、なすのか?」(To Be Or To Do?)