ビルド構成の概要
アプリケーションのコンパイル、ビルド、実行:インデックス への移動
ビルド構成は、 [プロジェクト|オプション...] ダイアログ ボックスのビルド関連ページで設定できるオプションで構成されます。ビルド構成は、プロジェクト ファイル(.dproj
や .cbproj
など)に保存されます。
目次
各プロジェクトに用意されている 3 つのデフォルト ビルド構成
[プロジェクト マネージャ]には、使用可能なビルド構成を一覧表示する[ビルド構成]ノードが含まれています。
Base、Debug、Release の 3 つのデフォルト ビルド構成があります。[プロジェクト マネージャ]では、[ビルド構成]ノード自体が Base 構成を表し、Debug 構成および Release 構成はそれぞれ別のノードとして表示されています。
Base を含む任意の構成でオプション値を変更することができます。Debug 構成と Release 構成は削除できますが、Base 構成を削除することはできません。
プロジェクトをコンパイルし保存すると、現在のビルド構成名に一致する名前のディレクトリにファイルが保存されます。Debug ディレクトリと Release ディレクトリはデフォルトで存在し、アクティブなカスタム ビルド構成のディレクトリはプロジェクトの保存時に作成されます。
Base 構成
Base 構成は、ユーザーがこれから作成するすべての構成で使用されるオプション値のデフォルト セットとなります。これらのオプション値はコンパイルやリンクなどに関連する一連のオプションであり、自分のプロジェクトのオプションは[<プロジェクト名> のプロジェクト オプション]ダイアログ([プロジェクト|オプション...])で変更することができます。
Base を含む任意のビルド構成でオプション値を変更することができます。Debug 構成と Release 構成は削除できますが、Base 構成を削除することはできません。
Debug 構成
Debug 構成は、Base 構成を拡張したもので、最適化が無効になり、デバッグが有効になっているほか、特定の構文オプションが設定されています。
Delphi プロジェクトの[プロジェクト マネージャ]に含まれているデフォルトのビルド構成 Debug は、アプリケーションやプロジェクトを新規作成した後に Delphi によって作成されます。
- メモ: アプリケーションの開発、デバッグ、変更を行っている間は、Debug 構成を使用することをお勧めします。
Release 構成
Release 構成は、Base 構成を拡張したもので、シンボル デバッグ情報が生成されないだけでなく、TRACE 呼び出しと ASSERT 呼び出しのコードも生成されません。その結果、実行可能ファイルのサイズが小さくなります。
Delphi プロジェクトの[プロジェクト マネージャ]に含まれているデフォルトのビルド構成 Release は、アプリケーションやプロジェクトを新規作成した後に Delphi によって作成されます。
- メモ: アプリケーションをリリース用にビルドするときには、Release 構成を使用することをお勧めします。生成される実行可能ファイルにはデバッグ情報が含まれないため、Debug 構成でビルドしたアプリケーションよりもサイズが小さく速度が速くなります。
特定のコンパイラ オプションの設定
[プロジェクト|オプション...|Delphi コンパイラ|コンパイル]ページで、ビルド構成に関する以下のオプションを設定することができます。
オプション |
[コード生成] |
[デバッグ] | ||
[最適化] |
[スタック フレーム] |
[デバッグ情報] |
[ローカル シンボル] | |
Debug 構成 |
オフ コンパイラは、いくつかのコード最適化を行いません。 |
オン 手続きおよび関数に対して常にスタック フレームが生成されます。 |
オン このオプションを有効にしてプログラムやユニットをコンパイルすると、統合デバッガで、ステップ実行とブレークポイントの設定を行うことができます。 |
オン このオプションを有効にしてプログラムやユニットをコンパイルすると、統合デバッガで、モジュールのローカル変数を調べたり変更することができます。 |
Release 構成 |
オン コンパイラは、いくつかのコード最適化を行います。 |
オフ 手続きおよび関数に対してスタック フレームが生成されません。 |
オフ このオプションを無効にしてプログラムやユニットをコンパイルすると、統合デバッガで、ステップ実行とブレークポイントの設定を行うことができません。 |
オフ このオプションを無効にしてプログラムやユニットをコンパイルすると、統合デバッガで、モジュールのローカル変数を調べたり変更することができません。 |
プロジェクトに指定されるアクティブな構成
各プロジェクトには、アクティブなビルド構成が 1 つ関連付けられているほか、作成したそれ以外のアクティブでないビルド構成が任意の数存在します。 アクティブなビルド構成の名前は、プロジェクト マネージャにおける[ビルド構成]ノード自体の名前の末尾にかっこで囲んで表示されるほか、そのノード下に表示される使用可能な構成のリストに太字で表示されます。 コンパイル、ビルド、クリーンアップ の各コマンドでは、プロジェクトのアクティブなビルド構成を使用します。
ビルド構成をアクティブにするには、次のいずれかを行います。
- [プロジェクト マネージャ]で、ビルド構成をダブルクリックします。
- ビルド構成を右クリックし、コンテキスト メニューから[アクティブ化]を選択します。
詳細は、「プロジェクトのビルド構成をアクティブにする」を参照してください。
親から値を継承するビルド構成
[Base]以外の各ビルド構成は、別のビルド構成に基づいており、そこから値を継承します。[Debug]構成と[Release]構成は、[Base]から値を継承しています。
[構成マネージャ]を使用すると、今度は、指定した任意のビルド構成に基づいて新しいビルド構成を作成でき、その新規ビルド構成はオプション値を親から継承します。ビルド構成をいったん作成すると、そのオプション値を自由に変更できるほか、そのビルド構成をプロジェクトまたはプロジェクト グループのアクティブな構成にすることができます。また、[Base]以外の任意のビルド構成を削除することもできます。
値を変更しない限り、親構成のオプション値が継承されます。この継承は静的なものではありません。つまり、親構成が変わると、そのすべての子構成でも親から継承した値が変わります。
オプションのデフォルト値は、親構成の同オプションの値です。[<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスで値をクリアすることで、オプションをデフォルト値に戻すことができます。
ビルド構成とオプション セットの比較
ビルド構成のオプション値を名前付きオプション セット(.optset ファイル)としてファイルに保存できます。 オプション セットは、任意のプロジェクトの任意のビルド構成に適用できます。 また、オプション セットの適用を、値で適用する(オプション セットの値の適用を 1 回限りとする)か、参照で適用する(その後のオプション セットへの変更もビルド構成に反映される)かを選択できます。
ビルド構成とオプション セットは、関係はありますが、別物です。両方とも一連のオプション値で構成されます。両者の主な違いは、ビルド構成がプロジェクトに関連付けられているのに対して、オプション セットは、プロジェクトとは関係のないファイルに保存されているという点です。ビルド構成の値はプロジェクト ファイルに保存されるため、プロジェクトを保存すれば、ビルド構成への変更も保存されます。しかし、オプション セットには影響しません。プロジェクトのビルド構成を変更したり、ビルド構成を追加または削除しても、オプション セットには影響しません。同様に、オプション セットを保存しても、ビルド構成は変わりません。
プロジェクトごとに、他のプロジェクトとは関係なく、独自の構成リストがあります。一方、ユーザーは任意のプロジェクトに任意のオプション セットを適用できます。[<プロジェクト名> のプロジェクト オプション]ダイアログ ボックスでは、[ビルド構成]ドロップダウン リストにそのプロジェクトのすべてのビルド構成(オプション セットは含まない)が一覧表示されます。しかし、[プロジェクト マネージャ]では、[ビルド構成]ノードの下に、ビルド構成と参照されるオプション セットの両方が一覧表示されます。
ビルド構成とオプション セットの値
ビルド構成とオプション セットには、指定可能なすべてのプロジェクト オプションの値が含まれているわけではなく、親の構成と異なるオプションのみ含まれています。[Base]構成にも、指定可能なすべてのオプションの値が含まれているわけではありません。
構成の中にオプションの値がない場合、IDE はその親の構成を調べます。それでも見つからない場合は、さらに、その親の構成を調べます。継承チェーン内のどの構成にもオプションの値が見つからない場合は、構成対象となっている適切なツールから値を取得します。
たとえば、構成の継承チェーンに特定のコンパイラ オプションの値が含まれていない場合、そのデフォルト値はコンパイラそのものによって指定されます。ビルド構成やオプション セットを保存する際には、(すべてのオプションの値ではなく)それらが持っている値だけが保存されます。