GNU make で make ファイルを作成2006年07月11日 15時43分46秒

GNU make でビルドシステムを書いている。元々、リンクするときのオブジェクトファイルをリンカーに渡すために羅列しなければいけないので、それを元に make ファイルも生成している。

雰囲気としては以下の様な感じだ。prog.pm というプログラムを、 prog.obj と submodule.obj と function.obj から作るとする。この三つのファイル名が prog.list というファイルに格納されているとしよう。なお、リンカーが .list ファイルを必要とする。話を簡単にするために全てのファイルは一つのディレクトリにあるとする。

ここで、make ファイルにも同じプログラムとオブジェクトファイルの規則を書いていたら、二度手間にしかならない。そこで、prog.list から .make.prog を作る。なお、リンカーは -list オプションを取ることにする。



%.pm : %.list
    link $@ -list $@.list

.make.% : %.list
    sh list2make.sh $< > $@

%.obj : %.c
    cc $< -o $@

-include .make.prog

こうすると、prog.pm を prog.list を元に自動で作れる。なお、GNU make では include の前にハイホンを付けると、ファイルが存在しない場合でもエラーで終了せずに操作を続ける。今回は手抜きで .make.prog を直に書いたが、こちらも wildcard を使えばいい。

list2make.sh で


prog.pm : prog.obj
prog.pm : submodule.obj
prog.pm : function.obj

という内容の .make.prog を作れば良いわけだ。makedepend のコマンドのようなものだ。makedepend が C ファイルを読み、ヘッダファイルとオブジェクトファイルの関係を導くのに対し、list2.make.sh はプログラムと、オブジェクトファイルの依存関係を構築する。さらにこの後に、makedepend でもして、-include すればヘッダファイルの依存関係も処理できる。

なお、今回の make ファイルは例として作っただけで、実際に動かしていない。GNU 'make' のサイトにもっと詳しい解説が書いてある。

次回

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2006/07/11/441626/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。