[コンパイル]

提供: RAD Studio
移動先: 案内検索

[Delphi コンパイラ] への移動

プロジェクト > オプション > ビルド > Delphi コンパイラ > コンパイル

このページを使用して、現在のプロジェクトのコンパイラ オプションを設定します。

メモ: ここに説明するすべてのオプションがすべてのタイプのプロジェクトに使用できるわけではありません。 たとえば、C++ プロジェクトでは[DCP 出力ディレクトリ]は表示されません。
オプション 説明

[ターゲット]、[適用...]、[保存...]

[ターゲット]オプション」を参照。

共通項目

[<プロジェクト名> のプロジェクト オプション]ページの共通項目」を参照。

[コード生成]オプション

項目 説明 コンパイラ スイッチ 特に記載がなければすべてのプラットフォームをサポート

[コードのインライン化の制御]

Delphi コンパイラ指令 {$INLINE <ON|OFF|AUTO>} を設定またはクリアします。詳細は、「手続きと関数の呼び出し(Delphi)」の「inline 指令の使用」を参照。 デフォルト = オフ

‑‑inline

[コード ページ]

アプリケーションの言語のコード ページを 1252 のように入力します。 コード ページは、特定の文字エンコード テーブルを表す 10 進数で、多くの言語に標準値が設定されています。 デフォルト値は[0]です。

‑‑codepage

[実行時型情報を出力する]

実行時型情報の生成を制御します。 デフォルト値は[False]です(実行時型情報は生成されません)。 デフォルト値は[false]です。

‑$M+
‑$M‑

[列挙型の最小サイズ]

列挙型に割り当てられるメモリ量の最小値を指定します。 [バイト]{$Z1}、[ワード]{$Z2}、[ダブル ワード]{$Z4} から選択できます。 下矢印 ポップアップ ボタンは、 「[プロジェクト オプション]ページの共通項目」で説明されています。 デフォルト値は[バイト]です。

‑$Z1
‑$Z2
‑$Z4

[最適化]

コードの最適化を制御します。 有効にすると({$O+} と同等)、コンパイラは多くのコードの最適化を実行します。たとえば、CPU レジスタへの変数の配置、共通の部分式の削除、誘導変数の生成などを実行します。 無効にすると({$O-} と同等)、これらの最適化がすべて無効になります。 特定のデバッグ環境以外では、最適化をオフにする必要はありません。 Delphi コンパイラで実行されるどの最適化の場合も、プログラムの意味は絶対に変更されません。 言い換えると、コンパイラではプログラマの特別な注意を必要とするような "安全でない" 最適化は行われません。 このオプションは、手続きまたは関数全体の最適化のオン/オフだけを切り替えます。 ルーチン内の 1 行または複数行について、最適化を有効または無効にすることはできません。 デフォルト値は[false]です。

‑$O+
‑$O‑

[レコード フィールドのアラインメント]

Delphi レコード型およびクラス構造体のフィールドのアラインメントを制御します。指定可能な値を選択するには、下矢印をクリックします。

  • オプション [オフ]{$A1} と同等)を選択するか、オプションを無効({$A-} と同等)にした場合、フィールドはアラインメントされません。 すべてのレコードおよびクラス構造体は packed になります。
  • [バイト]({$A2} と同等)を選択すると、packed 修飾子を付けずに宣言されたレコード型のフィールド、およびクラス構造体内のフィールドがバイト境界でアラインメントされます。
  • [ワード]({$A2} と同等)を選択すると、packed 修飾子を付けずに宣言されたレコード型のフィールド、およびクラス構造体内のフィールドがワード境界でアラインメントされます。
  • [ダブル ワード]({$A4} と同等)を選択すると、packed 修飾子を付けずに宣言されたレコード型のフィールド、およびクラス構造体内のフィールドがダブル ワード境界でアラインメントされます。
  • [クワッド ワード]({$A8} または {$A+} と同等)を選択すると、packed 修飾子を付けずに宣言されたレコード型のフィールド、およびクラス構造体内のフィールドがクワッド ワード境界でアラインメントされます。

$A 指令の状態にかかわらず、変数と型付き定数は常に最適にアクセスされるようにアラインメントされます。このオプションを [クワッド ワード]に設定すると、実行が速くなります。
これがデフォルトの設定です。

‑$A‑
‑$A1
‑$A2
‑$A4
‑$A8
‑$A+

[スタック フレーム]

手続きと関数のスタック フレームの生成を制御します。 有効にすると({$W+} と同等)、スタック フレームは不要な場合でも常に手続きと関数のために生成されます。 無効にすると({$W-} と同等)、スタック フレームはルーチンがローカル変数を使用することで決定されるように、必要な場合にのみ生成されます。 デバッグ ツールの中には、すべての手続きと関数のためにスタック フレームの生成を必要とするものもありますが、それ以外の場合、このオプションを有効にする必要はまったくありません。
デフォルト = True

‑$W+
‑$W‑

  • 32 ビット Windows
  • 64 ビット Windows
  • macOS 

[デバッグ]オプション

項目 説明 コンパイラ スイッチ 特に記載がなければすべてのプラットフォームをサポート

[アサーション]

Delphi ソースファイルのアサーション用のコード生成を有効または無効にします。 このオプションは、デフォルトで[True]です({$C+} と同等)。 製品となったバージョンでは実行時にアサーションが起きても意味がないため、実行速度を上げるためにも、アサーション用のコードを無効にするコンパイラ指令が用意されています。 このオプションで[false]を選択すると、アサーションが無効になります。

‑$C+
‑$C‑

[デバッグ情報]

デバッグ情報には各手続きの行番号テーブルが含まれ、オブジェクト コード アドレスをソース コードの行番号にマップするのに使用されます。 ユニットの場合、デバッグ情報はユニットのオブジェクト コードとともにユニット ファイルに記録されます。 デバッグ情報があると、ユニット ファイルのサイズが増加するため、このユニットを使用するプログラムをコンパイルするときに余分なメモリが必要になりますが、実行可能プログラムのサイズや速度には影響しません。 このオプションを有効にして({$D+} と同等)プログラムやユニットをコンパイルすると、統合デバッガで、ステップ実行とモジュール内のブレークポイントの設定を行うことができます。 [デバッグ情報を別個の TDS ファイルに保存する]および[マップ ファイル]のオプション([プロジェクト オプション]ダイアログの[リンク]ページ)を設定すると、このオプションをオンに設定してモジュールをコンパイルした場合にのみ、そのモジュールの完全なソース行情報が作成されます。このオプションは、通常、[ローカル シンボル]オプション({$L} スイッチ)とともに使用されます。$L スイッチは、デバッグのローカル シンボル情報の生成を有効または無効にします。

‑V ‑VN

[ローカル シンボル]

ローカル シンボル情報の生成を有効または無効にします。指定可能な値([true][false])を選択するには、下矢印をクリックします。 ローカル シンボル情報には、モジュール内のすべてのローカル変数および定数の名前と型が含まれます。つまり、モジュールの implementation セクションのシンボルと、モジュールの手続きおよび関数内のシンボルが含まれます。 ユニットの場合、ローカル シンボル情報はユニットのオブジェクト コードとともにユニット ファイルに記録されます。 ローカル シンボル情報があると、ユニット ファイルのサイズが増加するため、このユニットを使用するプログラムをコンパイルするときに余分なメモリが必要になりますが、実行可能プログラムのサイズや速度には影響しません。 このオプションを有効にして({$L+} と同等)プログラムまたはユニットをコンパイルすると、統合デバッガで、モジュールのローカル変数を調べたり変更することができます。 また、[表示|デバッグ|呼び出し履歴を使って、モジュールの手続きや関数の呼び出しを調べることができます。[デバッグ情報を別個の TDS ファイルに保存する]および[マップ ファイル]のオプション([<プロジェクト名> のプロジェクト オプション]ダイアログの[リンク]ページ)を設定すると、このオプションをオンに設定してモジュールをコンパイルした場合にのみ、そのモジュールのローカル シンボル情報が作成されます。このオプションは、通常、デバッグ用の行番号テーブルの生成を有効または無効にするための[デバッグ情報]オプションと併せて使用されます。コンパイラの[デバッグ情報]オプションが[false]になっている場合、このオプションは無視されます。

‑$L+
‑$L‑

[シンボル参照情報]

コード エディタおよび[プロジェクト マネージャ]によって使用されるシンボル参照情報を生成します。 Delphi コンパイラ指令 {$Y} と同等です。

  • [なし]を選択すると({$Y-})、シンボル参照情報は記録されません。
  • [定義のみ]を選択すると({$YD})、コンパイラは識別子が定義されている場所についての情報を記録します。
  • [参照情報]を選択すると({$Y+})、コンパイラは識別子が定義されている場所と使われている場所についての情報を記録します。

このオプションは、[デバッグ情報][ローカル シンボル](上記を参照)を有効にしないと効果がありません。 コード補完機能およびコード ナビゲーション機能(Ctrl キーを押しながらクリック)を使用できるのは、[シンボル参照情報][参照情報]に設定した場合だけです。

‑$Y+
‑$YD
‑$Y‑

[デバッグ版 DCU の使用]

デバッグ DCU はデバッグ情報を含み、スタック フレーム付きで構築されます。このオプションをオンにすると、[Embarcadero デバッガ]ページの[デバッグ用ソース パス]で指定した検索パスが、コンパイラによってデバッグ DCU パスに追加されます。

[インポートされたデータ参照を使用]

パッケージ化されたユニットで、他のパッケージ内の変数を参照できるようにします。Delphi コンパイラ指令 {$G} と同等です。

‑$G+
‑$G‑

  • 32 ビット Windows
  • 64 ビット Windows
  • macOS 

[その他のオプション]

項目 説明 コンパイラ スイッチ 特に記載がなければすべてのプラットフォームをサポート

[コンパイラに渡す追加オプション]

[プロジェクト|オプション...]ダイアログ ボックスによって制御される設定に追加するコンパイラ スイッチを入力します。スイッチ シンボルとしてハイフンを使用します。コンマでスイッチを区切ります。

uses 句でのコード補完では、.ducs もチェックします

コード補完 (Ctrl+Space) は、コード エディタで利用可能な支援機能で、コードをより簡単に完成させられます。

メモ: .pas および .dcu ファイルと動作します。この機能は、プロジェクトのオプションで、プラットフォーム毎レベルで無効にすることができます。

uses セクション内でコード補完を要求する場合、2 つのモードが利用可能です:

  • モード 1: 対応する .pas ファイルが検索パスにあるユニットのみを一覧表示します。
  • モード 2: .dcu ファイルが検索パスにあるユニットのみを一覧表示します。 これは、サードパーティのライブラリを使用する場合が考えられるでしょう。

オプション[uses 句でのコード補完で .dcus もチェックする]を外すと、モード1に切り替わります。 これは、検索パスに現在のプラットフォームと互換性のない DCU が多数あるディレクトリが含まれている環境などの場合に役立ちます。 例: Win32 および MacOS 用のアプリを開発するとします。 両プラットフォームで、検索パスには Win32 DCU を保有するディレクトリが多数含まれています。 現在のプラットフォームが MacOS で、"uses の補完"を要求する際、Win32 のユニットの非表示にしたい場合には、MacOS 上での DCU の提案をオフにします。

[安全でないコードを許可]

.NET に由来する「安全でない(unsafe)」という用語、ここでの「安全でない」とは、「管理されていない」、つまり「管理された」コードやデータ構造ではなく、直接メモリにアクセスするコードを意味します。.NET 環境の「管理されている」コードおよびデータ構造では、メモリ破壊やリソース リークが発生する可能性はほとんどありません。アセンブリ ステートメントは型指定も「管理されている」こともなく、ほとんどの場合、直接メモリにアクセスするため、.NET 標準では、常に「安全ではない」と見なされます。もちろん、アセンブリ コードは、正しく記述されていれば安全です。 Delphi には、安全でないコードについて 3 つの警告があり、Win32 と .NET の間で、より簡単にコードを共有することができます。安全でないコードについてのメッセージが適切でない場合は、[プロジェクト オプション]ダイアログの[ヒントと警告]ページで、その警告を無効にすることができます。 詳細については、以下を参照してください。

‑P

  • macOS 

[XML ドキュメントを生成]

XML 表現が含まれるファイルをプロジェクト ディレクトリに生成します。 詳細は、「Delphi コードの XML ドキュメント」を参照。
デフォルト = False

‑‑doc

[8.3 形式のファイル名も検索]

DCC32.exe または DCC64.exe に -P コンパイラ スイッチを渡します。 デフォルト値は[false]です。 <ファイル名>.ext という古い形式の DOS ファイル名を使用できるようになります。<ファイル名> の長さは 1 ~ 8 文字です。 32 ビット Windows プラットフォームおよび 64 ビット Windows プラットフォームでサポートされています。

‑P

  • 32 ビット Windows
  • 64 ビット Windows

[ユニット依存情報を出力]

DCC32.exe に -depends コンパイラ スイッチを渡します。デフォルト値は[false]です。 Delphi コマンドライン コンパイラに、".d" ファイル拡張子のテキスト ファイルを生成させます。 生成された ".d" ファイルは、すべての をリストアップし、プロジェクトのユニット ファイル名である .dcus(およびその依存ファイル) をすべて、パス名も含めてリストにします。

メモ: このオプションは、IDE 内のプロジェクト用に生成された依存ファイルを取得するために、コマンドライン コンパイラに対してのみ機能します。それには、[Use MSBuild externally to compile] が true でなければなりません。

‑‑depends

[$IF は $IFEND で終了]

{{IF 句を終了するために(正式の $ENDIF ではなく)}}IFEND を使用できるようになります。 このオプションを有効にしなければ、コンパイラから E2029 が出力される可能性があります。 「従来の IFEND(Delphi)」コンパイラ指令を参照。 デフォルト値は[false]です。

‑‑legacy-ifend

[XML ドキュメント出力ディレクトリ]

プロジェクトの XML ドキュメントを生成する先のフォルダを指定します。上述の[XML ドキュメントを生成]オプションを参照。

‑NX

Android 32 ビットおよび 64 ビット アプリケーション バンドルの生成 (armeabi-v7a + arm64-v8a)

コンパイラは、32 ビットと 64 ビットの両 Android バイナリを格納したアプリケーション バンドルを作成します。 Default = False (64 ビット バイナリのみ作成)。

  • 64 ビット Android

macOS ユニバーサル バイナリ ファイルの生成 (x86_64 + arm64)

コンパイラは、ユニバーサル バイナリ ファイルを、64 ビット Intel macOS と 64 ビット ARM macOS の両方に対して作成します。 Default = False (64 ビット ARM バイナリのみ作成)。

  • macOS ARM 64 ビット 

[実行時エラー]オプション

項目 説明 コンパイラ スイッチ 特に記載がなければすべてのプラットフォームをサポート

[I/O チェック]

入出力手続きの呼び出し結果をチェックするコードの自動生成を有効または無効にします。 このスイッチがオンのときに入出力手続きがゼロ以外の入出力結果を返すと、EInOutError 例外が発生します(例外ハンドラを使用できない場合はプログラムが終了します)。 このスイッチがオフのときは、IOResult を呼び出して入出力エラーをチェックする必要があります。
デフォルト = True

‑$I+
‑$I‑

[オーバーフロー チェック]

オーバーフロー チェック コードの生成をコントロールします。 有効にすると({$Q+} と同等)、特定の整数算術演算(+、-、*、Abs、Sqr、Succ、Pred、Inc、および Dec)のオーバーフローがチェックされます。 これらの整数演算のコードには、結果がサポート範囲内であることを検証するコードが追加されます。 オーバーフロー チェックが検出されると、EIntOverflow 例外が発生します(例外ハンドラを使用できない場合はプログラムが終了します)。 このスイッチは、常に範囲検査オプション({$R} スイッチ)とともに使用され、範囲検査コードの生成を有効または無効にします。 オーバーフロー チェックを有効にすると、プログラムの処理速度が遅くなり、サイズも多少大きくなります。 デフォルト = True

メモ: このオプションを true に設定すると、デバッグ中にパフォーマンス中に落ちがあるかもしれません。

‑$Q+
‑$Q‑

[範囲チェック]

範囲検査コードの生成を有効または無効にします。有効にすると({$R+} と同等)、すべての配列および文字列のインデックス式が定義された範囲内にあるかどうかが検査されます。また、スカラ型および部分範囲型変数へのすべての代入が範囲内にあるかどうかも検査されます。範囲検査に失敗すると、ERangeError 例外が発生します(例外ハンドラを使用できない場合はプログラムが終了します)。範囲チェックを有効にすると、プログラムの処理速度が遅くなり、サイズも多少大きくなります。 デフォルト = True

メモ: このオプションを true に設定すると、デバッグ中にパフォーマンス中に落ちがあるかもしれません。

‑$R+
‑$R‑

[構文オプション]

項目 説明 コンパイラ スイッチ 特に記載がなければすべてのプラットフォームをサポート

[割り当て可能な型付き定数]

型付き定数が変更できるかどうかを制御します。 有効にすると({$J+} と同等)、型付き定数は変更でき、実質的には初期化済み変数となります。 無効にすると({$J-} と同等)、型付き定数は真に定数であり、これを変更しようとすると、コンパイラはエラーを報告します。 書き込み可能な定数は、実行時に変更できる変数として型付き定数の使用を参照します。 書き込み可能な型付き定数を使用する古いソース コードは、このオプションを無効にしてコンパイルする必要があります。ただし、新しいアプリケーションでは初期化済み変数を使用するようにし、このオプションを無効にしてコードをコンパイルすることをおすすめします。 デフォルト値は[false]です。

‑$J+
‑$J‑

[完全論理評価]

AND および OR 論理演算子に対する 2 種類の Delphi コード生成法のどちらかを選択します。 有効にすると({$B+} と同等)、コンパイラによって論理式の完全評価のコードが生成されます。 その場合、式全体の結果が既にわかっていても、AND および OR 演算子からなる論理式のすべてのオペランドが必ず評価されます。 無効にすると({$B-} と同等)、コンパイラは、論理式の短絡評価を行うコードを生成します。これは、左から右に評価していく際に、式全体の結果が明らかになった時点で、評価が停止されることを意味します。 デフォルト値は[false]です。

‑$B+
‑$B‑

[拡張構文]

下位互換性のために提供されています。 Delphi アプリケーションの作成時には、このオプション({$X-} モードと同等)を使用しないでください。 このオプションは、次の Delphi の拡張構文を有効または無効にします。 関数文。{$X+} モードでは、関数の呼び出しは手続きの呼び出しとして使用できます。つまり、関数呼び出しの結果は、別の関数に渡したり演算や代入に使用することなく破棄することができます。一般には、関数で実行される計算は結果によって表されるため、結果を破棄してしまってはほとんど意味がありません。しかし、時には、役立つ結果を生成せずに、グローバル変数の値を設定するなどのタスクを実行するために関数が呼び出されることもあります。 Result 変数。有効にすると({$X+} と同等)、関数の戻り値を保持するあらかじめ定義された変数 Result を関数の本体内で使用できます。 NULL 終端文字列。有効にすると、Delphi 文字列を PChar 型と互換のゼロベース文字配列(Char の array[0..X])に代入できます。 デフォルト値は[true]です。

‑$X+
‑$X‑

[デフォルトは長い文字列]

このオプション({$H} 指令と同等)は、予約語 string が型宣言で長さの指定なしで使用されるときの意味を制御します。 ジェネリック型 string は、動的に割り当てられる長い文字列(基底型 UnicodeString)か、静的に割り当てられる短い文字列(基底型 ShortString)のいずれかを表します。 Delphi のデフォルトでは、汎用文字列型は長い UnicodeString 型と定義されます。 コンポーネント ライブラリのすべてのコンポーネントは、この状態でコンパイルされています。自分でコンポーネントを記述するときにも、長い文字列を使用する必要があります。同様に、コンポーネント ライブラリの文字列型プロパティからデータを受け取るコードも、長い文字列を使用しなければなりません。無効の状態({$H-} と同等)では、デフォルトで短い文字列を使用する Delphi のバージョンからのコードを使用するのに役立ちます。文字列型定義の意味をローカルでオーバーライドして、短い文字列が生成されるようにすることができます。また、コード内の短い文字列型の宣言を string[255] または ShortString に書き換える方法もあります。これにより、あいまいさがなくなり、このオプションにも依存しなくなります。 デフォルト値は[true]です。

‑$H+
‑$H‑

  • 32 ビット Windows
  • 64 ビット Windows
  • macOS 

[オープン パラメータ]

長い文字列をサポートしてコンパイルされたコードにのみ意味があります。Delphi の初期バージョンとの下位互換性のために提供されています。 このオプション({$P} 指令 と同等)は、長い文字列が無効の状態({$H-} と同等)で string キーワードを使って宣言された変数パラメータの意味を制御します。 無効にすると({$P-} と同等)、string キーワードを使って記述された変数パラメータは、通常の変数パラメータになります。一方、有効にすると({$P+} と同等)、オープン文字列パラメータになります。 このオプションの設定にかかわらず、OpenString 識別子は、オープン文字列パラメータの宣言に常に使用できます。 デフォルト値は[true]です。

‑$P+
‑$P‑

[var 文字列の厳密処理]

このオプション({$V} 指令と同等)は、短い文字列を使用する Delphi コードにのみ意味があります。Delphi および Object Pascal の初期バージョンとの下位互換性のために提供されています。 このオプションは、変数パラメータとして渡された短い文字列の型を制御します。 有効にすると({$V+} と同等)、厳密な型チェックが行われ、仮パラメータと実パラメータが同一の文字列型であることを要求します。 無効にすると({$V-} と同等)、短い文字列型の変数はすべて実パラメータとして使用できます。宣言された最大長が仮パラメータの最大長と同じでなくてもかまいません。 デフォルト値は[true]です。

‑$V+
‑$V‑

[型付き @ 演算子]

@ 演算子によって生成されるポインタ値の型およびポインタ型の互換性を制御します。 有効にすると({$T-} と同等)、@ 演算子の結果は、常にほかのすべてのポインタ型と互換性のある型なしポインタ(Pointer)です。 有効な状態({$T+} と同等)で、@ を変数の参照に適用すると、結果として型付きポインタが得られます。これは、Pointer およびその変数の型へのほかのポインタとだけ互換性があります。 無効にすると、Pointer 以外の個別のポインタ型は(同じ型へのポインタであっても)それぞれ互換性がありません。 有効にすると、同じ型へのポインタは互換性を持ちます。 デフォルト値は[false]です。

‑$T+
‑$T‑


ヒント: プロジェクトのコンパイル時にメッセージ ウィンドウにコンパイラ オプションを表示させるには、[ツール|オプション...|IDE|コンパイルと実行]を選択し、[コマンド ラインを表示]を選びます。次回プロジェクトをコンパイルすると、プロジェクトのコンパイルに使用されたコマンドと応答ファイルの両方が、メッセージ ウィンドウに表示されます。応答ファイルには、コンパイラ オプションとコンパイルされるファイルの一覧が記載されています。


注意: RAD Studio は、IDE コンパイラが使用するメモリ量をチェックし、利用可能メモリの合計の 60% を超えると、コンパイラはユニット キャッシュをフラッシュします。 デフォルトでは、これは 60% に設定されていますが、特定のシステムではこのパーセンテージは高過ぎ、IDE のクラッシュまたはロックアップを引き起こします。

しきい値 60% を変更するには、レジストリ設定を使用して次の手順に従います:

  1. IDE をシャットダウンします。
  2. regedit を実行し、次のキーに移動します: HKEY_CURRENT_USER\Software\Embarcadero\BDS\21.0\Compiling
  3. 新しい DWORD 値を、"ProcMemAllocLimit” という名前で作成し、その値を 50(10進数)に設定します。
  4. regedit を閉じます。
  5. IDE を開始します。

関連項目