プロジェクトのコンパイル、ビルドと実行

概要

プロジェクトの実行型式ファイルは二つのステップで生成されます:

  1. コンパイル

  2. リンク

この二つのステップをまとめて ビルド と呼びます。他のステップもビルド・プロセスの中に含まれますが、説明を簡単にするために、この二つのステップにだけ焦点をあてることにします。

コンパイル はオブジェクトファイルが該当するソースファイルから生成されるステップです。例えば、ソースファイル hello.c をコンパイルすると hello.o が生成されます。通常、これらのオブジェクトファイルを気にとめる必要はありません - 最終的に生成される実行型式ファイルを作成する間に生成される中間生成物と考えて下さい。

オブジェクトファイル (*.o files) が生成されたら、それらを全て (いくつかのライブラリも) 一緒にリンクして、最終的な実行型式ファイルを生成します。このステップを リンク と呼びます。

ソースのコンパイル

プロジェクトの中で、個人的に作成したソースファイルを別にコンパイルしてオブジェクトファイル (*.o files) にすることができます。しかしながら、これらのオブジェクトファイルを気にとめる必要はありません。最初にファイルをコンパイルするのが簡単だからです (例えば、文法エラーがないか確認して下さい)。プロジェクト全体をビルドするには多くの時間を費やします。特に大規模なプロジェクト、あるいはもっと複雑なアプリケーションの場合はなおさらです。それ故に、プロジェクトを進めている間は、編集-コンパイル-編集-コンパイル-... という繰り返し作業をおこなうことになります。

一つのファイルをコンパイルする場合は、メニュー・アイテムle ビルド(_B)->コンパイル(_C) を選択するか、拡張ツールバーにある コンパイル ボタンをクリックして下さい。すると、現在表示されているファイルがコンパイルされます。

実行型式ファイルのビルド

Anjuta には分割リンクコマンドはありません。単に必要無いからです。ビルド・プロセスでは全てのソースファイルをコンパイルして、ライブラリと一緒にリンクします。ビルドコマンドはこれらのファイルが更新されている (これを 依存性の確認 と呼びます) とリビルドを行います。各ファイルがそれぞれコンパイル済みの場合、ビルド・プロセスではリンクのみ行います。また、プロジェクトが既にビルド済みで依存するファイルが更新されていない場合は、リンクのステップはスキップされます。

では依存性のチェックはどのようにしてプロジェクト開発に影響を与えているのでしょうか? 今変更したファイルがあるとすると、変更したファイルに依存しているソースファイルの全てがリコンパイルされます。ビルド・プロセスでは、プロジェクトにある全てのファイル (オブジェクトファイルや実行型式ファイルだけではなく) がこのチェックの対象となります。変更済みの他のファイルと依存関係をもつ特定のファイルが見つからない場合は、そのファイルが再生成されます。

今、依存性のチェックについておおまかに理解できたことと思います。ここで、もし依存性のチェック機構が存在していなかったら、貴方のプログラミング・ライフがどのようになっているか想像できるでしょうか?もしその問いに答えることができないとしたら、大規模なプロジェクトを開始するときにお分かり頂けると思います!

ビルド(_B)->ビルド(_B) では src (ソース) ディレクトリにある全てのファイルをビルドして、実行型式ファイルを生成します。ビルド(_B)->全てビルド(_A) ではプロジェクト全体 - 全てのサブディレクトリ (src も含む) が再帰的にビルドされます。

配布可能パッケージの生成

プロジェクトの配布可能な tarball をビルドする場合は、ビルド(_B)->配布可能ファイルの作成 を選択して下さい。これは tarball (*.tar.gz) を作成して、プロジェクト・ディレクトリのトップレベルに格納します。そのファイルを配布するためにどこか安全な場所にコピーして下さい。

インストール

メニュー・アイテム ビルド(_B)->インストール(_I) では生成したアプリケーションをお使いのシステムにインストールします。

Note注記
 

システム規模のインストールを行う場合は root でログインする必要があります。さらに GNOME アプリケーションはプロジェクトの中で Pixmap (アイコン) を使用するので、システム規模でインストールする必要があることに注意して下さい。さもないと、プロジェクトの中でアプリケーションが起動された時に、たくさん "pixmap not found" エラーが発生してしまいます。

Configure

プロジェクトのトップ・ディレクトリにある configure スクリプトを実行する場合は、メニュー・アイテム ビルド(_B)->Configure(_F) を選択して下さい。そのスクリプトはシステム規模のビルド条件を決定して、ビルドに必要ないくつかのファイル (Makefileconfig.h) を生成します。これは必須です。その理由は、アプリケーションはこれらのオプションの特定の設定に依存しているかもしれないからです。

Important重要
 

configure が完了するまで、プロジェクトのビルドを開始しないで下さい。

configure スクリプトは (通常) はじめてビルド・プロセスを行う時の最初のほうで一度実行されます - 例えば、今ちょうどプロジェクトの配布用ソース tarball を展開した直後とします。そのあと、configure によるビルド条件の検出は自動的にビルド・プロセスに続いて処理されます。アプリケーション・ウィザード を使用してアプリケーションを生成した場合は、configure を別に実行する必要はありません: ウィザードではプロジェクトの生成過程の一部としてこのスクリプトを実行します。

configure スクリプトに対して追加オプションを指定することも可能です。Configure メニュー・アイテムを選択した後に、追加オプションを入力するためのダイアログが表示されます。

Figure 2. Configure オプション・ダイアログ

なにかオプションを入力して (あるいは、デフォルト値を使用するということで空白のままにして) OK をクリックして下さい。configure スクリプトで利用可能なオプションを確認する場合は、--help というオプションをオプション・エントリボックスに入力して OK ボタンをクリックして下さい。利用可能なオプションが メッセージ・ウィンドウ の中に表示されます。

configure を一度だけ実行するために必要な条件は何もありません。いつでも実行可能で、通常は configure に対するオプションを変更する必要がある場合に行います。一つ注意してほしいことは、トップレベル・ディレクトリの中にある config.h ファイルが変更されたら、configure スクリプトを再度実行しても上書きすることはない、ということです。

自動生成

自動生成は二つのステップから構成されます: automake の実行とそのあとの autoconf の実行です。もしプロジェクト・ディレクトリのトップレベルに autogen.sh 実行スクリプトがあれば、このファイルが前述の二つのステップの代わりに実行されます。configure スクリプトのように、自動生成はビルド・プロセスによって自動的に処理されます。プロジェクトを configure するために別な場面 (複数のビルドファイルを編集したあとで同期に失敗したためにたくさんのエラーが発生するといったような) で実行することも可能です。

Note注記
 

Configure とは異なり、自動生成は一度として実行する必要がありません - 実際、まったく実行する必要がないのです!オプションは利用可能です。その理由はいろいろな条件に対応することができるからです。

メニュー・アイテム ビルド(_B)->自動生成(_G) を選択すると、プロジェクトの自動生成が始まります。

これらのツールの動作について詳細については automakeautoconf の info ページを参照下さい。

Clean

このオプションはプロジェクトをクリアして 全てビルド(_A) を実行するために必要な状態にしてくれます。ビルド・プロセス実行時に生成された全てのファイルを削除します。そのファイルには src ディレクトリ (とその他のディレクトリ) の中にある、全てのオブジェクトファイル (*.o files) と実行型式ファイルが含まれます。

メニュー・アイテム ビルド(_B)->Clean を選択するとプロジェクトが clean されます。

全て Clean

全て Clean (これは 配布ファイル Clean、あるいは短縮して clean dist とも呼ばれます) について説明することはほとんどありません。プロジェクトをクリアして Configure全てビルド を実行するために必要な状態にしてくれます。ビルド・プロセス実行時に生成された全てのファイルを削除します。そのファイルには全てのオブジェクトファイル (*.o files)、実行型式ファイルと全ての Makefile が含まれます。言い換えると、あたかも配布用 tarball をちょうど展開した直後のプロジェクトの状態にしてくれます。

メニュー・アイテム ビルド(_B)->全て Clean を選択するとプロジェクトを完全にクリアします。