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 の下に放りこみました。今までサブプロジェクト間の依存は手動でやっていたのですが、それから開放され気分が良いです。

*1:以前は粒度が大幅に下がりって書いてた

*2:date でもビルドが一秒以内で終わったら内容が変わらんので困りますね。何か、必ず前の内容とは違うモノを作れる簡単なコマンドがあれば、ベターなのですが知りません。