OMakefile で Makefile で書かれたサブプロジェクトを管理する方法
まだ安定していません。細かいところ予告なく調整していきます。
既存 Makefile によるプロジェクトの omake への組み込み方は、二つあります。
OMakefile へ移植
ひとつは、Makefile を OMakefile に移植すること。Makefile が何やってるか完全に理解する必要がありますが、自分のプロジェクトであれば、あまり手間はかからないでしょう。というか、omake 使うんでしょ?じゃあ自分のツリーくらい、OMakefile で書きましょうよ。
Makefile へ丸投げ
もひとつは、粒度が大幅に粗くなり*1ますが、make に任せてしまう方法。
Makefile.omake とか作って
all: ./configure; make clean all install
とか書いといて、make -f Makefile.omake all するとクリーンビルドするようにしときます。clean のルールとかも書いておいてよいかもしれませんが、どこまで clean するか、uninstall もするのか、とかいろいろ場合によって違うと思うので省略します。
さて、OMakefile 側では、
DONE: <all source files in the Makefile project> make -f Makefile.omake all date > $@ .DEFAULT: DONE
DONE というファイルがソース全ファイルに依存するとして、DONE の作成には make -f Makefile.omake all が必要だと書いときます。DONE の作成には touch DONE じゃなくて date > DONE。omake はタイムスタンプではなく、ファイルの中身の変化を監視するので、touch だけでは変化を検出しません。*2
このプロジェクトに依存している別の omake プロジェクトでは、この DONE への依存関係を作ってやるとよろしい。
こうしとけばうまくいきます。多分。基本的なアイデアはこんな感じよ。細かいとこは人によって違うはずなので、そこんとこは自分で試行錯誤してください。
この方法だと、プロジェクト内の依存関係は Makefile に丸投げしてしまって、まったくもって大雑把な依存関係しか omake は把握しません。ですから、プロジェクトの中身がちょっとでも変わると configure からやりなおしという粒度の低さです。が、自作でもない外部ライブラリのツリーはあまり触らないから、これでも十分な場合が多い。
まあ、普通の Makefile のプロジェクト間でも同じようなことはできるんで、別に目新しいことじゃないんですが、目的は Makefile プロジェクトを如何に簡単に omake 環境に取り込むかって事なんでご紹介しました。
私はまあこんな感じで個人用のソースツリーと、依存するライブラリのソースは全部 OMakefile の下に放りこみました。今までサブプロジェクト間の依存は手動でやっていたのですが、それから開放され気分が良いです。