第46回
makeによるマルチモジュール開発の合理化

マルチモジュール開発の合理化

前回、ソースを役割別に分けると、ソースの修正や保守管理がやりやすくなることを紹介しました。しかし、わずかな修正のたびにすべてのソースを再コンパイルするのは無駄な作業です。

マルチモジュールは無駄?!

たくさんの機能を詰め込んだ大規模なプログラムでは、ソースファイルを機能別に分けて記述するマルチモジュール開発が、大いに役立ちます。

前回は、タブ・スペース変換プログラム"stconv"を機能別のソースファイルに分割して、マルチモジュール開発の実例を紹介しました。その際、複数のソースファイルをコンパイルする手順として、LSI-Cのコンパイラ・ドライバLCCを以下のように実行する方法を紹介しておきました。

LCC -j -o stconv.EXE stconv.c datinit.c convert.c > stconv.ERR

アンダーラインの箇所で、複数のソースファイル名を列挙しています。例のようなシンプルなプログラムではソースファイルの数が少ないため、この方法でも大きな問題は生じないでしょう。

しかし、複雑な機能を持った大規模なプログラムの開発でこそマルチモジュールの威力が発揮できるのは、言うまでもありません。すると、上記のような方法では、ソースのほんの一部を書き換えただけでも、たくさんのソースをコンパイルし直さなければならなくなります。

コンパイルとリンクの合理化

修正されたソースを再コンパイルするのは当然ですが、修正していない大半のソースまでコンパイルするのは大きな無駄です。プログラムの規模が大きくなればなるほどソースは膨大になり、コンパイルにもそれなりの時間がかかってしまうからです。

修正していないソースファイルは、最初(または修正直前)の段階ですでにオブジェクトファイルが生成されています。

ならば、すでに生成されているオブジェクトファイルはそのままにしておき、修正されたソースから生成し直されたオブジェクトファイルとともにリンクすれば、実行形式ファイルを生成する時間は大きく短縮できるはずです。

それを実現するツールがmake(メイク)です。makeは『プログラムメインテナ』と呼ばれ、プログラム開発の要であるコンパイルとリンクの作業を合理化してくれます。