omake: OCamlフレンドリーな超強力ビルド ツール

omake という make のパチモンみたいなものがある。だが、「おまけ」の癖にこれが素晴らしいツールなのだ。私が仕事でOCamlプログラムを書く時には必ずこれを使う。

念のために言っておくと、OCamlMakefile という、OCaml でよく使う定義を集めた Makefile 集のようなものがあるが、これは omake ではない。omake は超強力 make コマンドだと思ってもらえれば良い。

詳しいチュートリアルを書くつもりはない。それは omake の作者にまかせて、特徴を並べよう:

  • OCamlプログラムをコンパイルする際のルールが既に登録されている。.SUFFIXES: .ml などと書く必要はない。
  • 依存解析が自動かつ強力。依存ルールを書く手間が大幅に減る。
  • ディレクトリを跨いだプログラムのビルド。依存解析は OMakeroot ファイルの存在するディレクトリを頂点として OMakefile ファイルが存在する総てのディレクトリに対し、再帰的に行う。ビルドに必要な作業は、それがどこのサブディレクトリにあっても、(たとえ omake を実行した外であっても!)自動的に行われる。
  • ソースの更新はファイルスタンプではなく、ファイル内容のチェックサムの変化で検出する。純粋に内容で判断するため、同内容のファイルが生成されたにも関わらず、タイムスタンプだけが新しくなったので、それ以降のビルドは総てやり直し、といった make の様な事は起きない。
  • omake -j による並行ビルドが可能。マルチコアだと大変にうれしい。完全に依存を解析するからこそできる芸当。
  • omake -P による継続監視ビルド。omake -P はビルドが終了した後も依存関係を持ったまま居残り、ソースファイルを監視し続ける。ソースが更新されたことを検出すると、必要なビルドのみを瞬時に開始する。このため、-P を使うと強力な依存検出にもかかわらず、make を使っていた時とは比較にならないほどストレスなくコンパイル+デバッグループの遂行が可能になる。

どうです。良さそうでしょう。ただ、これを一度知ってしまうと、複雑なプロジェクトにはもう make を使えない体になってしまうので、導入には注意したほうがよい。

ちなみに、この omake は(OCamlで書かれてはいるが) OCaml に特化したツールではないので他の言語のプロジェクトでも使用可能だし、上のほとんどの特徴が利用できるはずだ。

OMakefile の書き方や、約束事には少し癖があって、初めはちょっととまどるかもしれない。しかし、Makefile だってそうだったはずだし、omake でも不便な所を見つければ自分で内部ルールをどんどん拡張していけるので問題ない。間違いなくあなたの OCaml プログラミング効率が向上することを保証しよう!

追記

Emacs から omake を使ってみる elisp omake-mode.elを書いた。使ってみれば嬉しいかもしれない。嬉しくないかもしれない。