II-8-1. 複数ソースプログラムのビルド

多くのソフトウェアでは、ひとつのソースコードで全てのコードが記述されるわけではない。ソースコードを分割することのメリットについて説明し、複数のソースコードからアプリケーションをビルドするためのツールであるmakeの概念と利用方法について解説する。

【学習の要点】

* プログラムのソースコードはしばしば複数のソースファイル(または他のファイル)から生成される。

* プログラムは、自分以外の人が書いたライブラリを組み込んで構成することがある。OSによって提供される機能(ライブラリやシステムコール)を利用する場合もこれに相当する。このような場合、ライブラリやシステムコールは、外部のプログラムから利用できるようにヘッダファイルと呼ばれるインタフェースを公開する。

* 外部にインタフェースを公開する以外にも、ソースコードの可読性を向上させたり、モジュール性を持たせたりという目的のために分割することがある。

* makeコマンドは、対象ソースファイル、参照ヘッダファイル、参照ライブラリ、およびコンパイル・リンクオプションの書かれたファイル(makefile)を読み込んで、プログラムのビルドを自動化するツールである。

図II-8-1. makeの流れ

 

【解説】

1) ソースコードを分割することのメリットとデメリット

* メリット

- ヘッダファイルと呼ばれるインタフェースを使って、ライブラリとして外部に公開したとき、汎用性が高まる。

- 個々のモジュールを小さくすることにより、モジュール性を高めることができる。

- デバッグ時に問題の切り分けがより単純になる。また、ソースコードの可読性が向上する。

- 一度ソースファイルをコンパイルすれば、変更を加えない限り再コンパイルする必要がなくなるので、プログラムをコンパイルする合計時間を短縮できる。

* デメリット

- 過度に細かく分割した場合、ソースファイル数が膨れ上がり、可読性は逆に低下してしまう。

2) ヘッダファイル

* 関数プロトタイプ宣言が記述されたファイルのこと。ライブラリのインタフェースとして機能する。

* そのライブラリを使用するソースファイルをコンパイルするとき、ヘッダファイルを使って、関数の呼び出しが正しいかチェックする。

3) makeとは

* 複数のソースファイルからなるプログラムのビルドを、自動化するためのツールのこと。

* CやC++だけでなく、TeXやデータベース管理などにも適用できる。

* メリット

- 不要な再コンパイルを避ける事ができ、ビルド時間を短縮できる。

- コンパイルだけでなく、モジュールやライブラリとのリンク方法も定義できる。

- プログラム自体の複雑さが増大するほど、コンパイルやリンクを手作業で行う際に発生するミスが増える。makeによりそれらを避けることができる。

* makeを使用するためには、プログラムをビルドするためのルールが記されているファイル (ビルドファイル)「makefile」を作成する必要がある。

- 最初のルールは基本的に、ターゲット、必須項目、実行コマンドから構成される。

- それらのルールに、対象ソースファイル、参照ヘッダファイル、参照ライブラリ、およびコンパイル・リンクオプションなどが記述される。

- 書かれた要素間の依存関係をもとに、makeはファイルのタイムスタンプの比較を行うなどして、不必要なコンパイル作業を除去し、ビルドを最適化する。

* Javaにおいてはmakeの代わりに作られたビルドツールとしてAntがある。Antもmakefileと同様にビルドファイルを持つが、それはXMLにより記述される。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。