C++ コマンドライン コンパイラ: BCC32
CodeGear C++ コンパイラ(BCC32.EXE)は、リソース コンパイラ シェルです。コマンドライン構文に応じて、BRCC32 および RLINK32 を呼び出します。
目次 |
コマンドライン構文
bcc32 [オプション [オプション...}] <ファイル名> [<ファイル名>...]
コマンドライン コンパイラ名、各オプション、ファイル名は、スペースで区切ります。各オプションの前には、ハイフン(-)またはスラッシュ(/)を付けます。次はその例です。
BCC32 -Ic:\code\hfiles
また、オプションを設定ファイル(.CFG)に指定することもできます。これについては、後のセクションで説明します。
BCC32 を使うと、.OBJ ファイルを ILINK32 に、あるいは .ASM ファイルを TASM32 に(TASM32 がお使いのマシンにインストールされている場合)渡すことができます。
BCC32 構文オプションの詳細情報を確認するコマンドライン ヘルプ
[RAD Studio コマンド プロンプト] ウィンドウで BCC32.exe コマンドライン ヘルプを表示するには、-h コマンドライン オプションを指定します。
よく使われるコンパイラ コマンドライン オプションの一覧を表示するには、次のように入力します。
BCC32 -h
表示される一覧で * の付いたオプションは、デフォルトで有効になっているオプションです。
C:\>bcc32 -h
C++ 5.92 for Win32 Copyright (c) 1993, 2009 Embarcadero
使用できるオプション (* はデフォルトの設定。xxx はサブオプションで、-h -X などで表示)
(メモ: -X- または -w-XXX は、通常、-X による設定または設定解除を取り消します)
-3 80386 保護モード互換命令を生成する
-4 80386/80486 保護モード互換命令を生成する
-5 Pentium 命令を生成する
-6 Pentium Pro 命令を生成する
-Axxx ANSI 準拠を有効にする
-B .ASM にコンパイルして (-S) から .OBJ にアセンブルする
-C コメントのネストを有効にする
-CP コード ページングを有効にする (MBCS の場合)
-D -D <name> では 'name' を null 文字列として定義する、または -D<name>=<value> を使用する
-E 使用するアセンブラを指定する
-G サイズと実行速度を最適化する。 -O1 と -O2 を代わりに使用する
-Hxxx プリコンパイル済みヘッダーを生成し使用する
-I インクルード ファイルの検索パスを設定する
-Jxxx テンプレート生成オプション
-K デフォルトの文字型を符号なしに設定する
-L ライブラリ ファイルの検索パス
-M リンカ マップ ファイルを作成する
-O ジャンプの最適化
-P ソースの拡張子に関係なく C++ コンパイルを実行する
-Q 拡張コンパイラ エラー情報
-R 生成された .OBJ ファイルにブラウザ情報を含める
-RF シンボルへの参照を検索する
* -RT 実行時型情報を有効にする
-S アセンブリ コードにコンパイルする
-T アセンブラ オプション (たとえば -Tx) を指定する
-U 名前の以前の定義をすべて取り消す
-Vxxx 互換性オプション
-Wxxx ターゲットは Windows アプリケーション
-X コンパイラに自動依存情報を出力させない
-axxx データ アラインメントの境界を設定する。デフォルトは -a8 で -a- は -a1 を意味する
* -b 列挙 (enum) 型を整数型にする (-b- では列挙型を可能な場合 short 型にする)
-c オブジェクト ファイルのみコンパイルし、リンクしない
-d 重複文字列をマージする
-dc 文字列を読み取り専用データ セグメントに挿入する
-dw 文字列を (書き込み可能な) データ セグメントに挿入する
-e ターゲットの実行形式パス名を指定する
* -ff 高速浮動小数点演算
-fp Pentium の FDIV の欠陥を訂正する
* -fq サイレント モードの浮動小数点比較命令 (FUCOMP) を使用する
-g n 回の警告の後でバッチ コンパイルを停止する (デフォルトは 255)
-h ヘルプを表示する ('-h -' ではすべてのヘルプを表示する)。-h -V を指定可能
-i 識別子として認識される最大長を設定する (デフォルトは 250)
-j n 回のエラー発生後にバッチ コンパイルを停止することを指定する (デフォルトは指定なし)
* -k 標準スタック フレームを生成する
-l オプションをリンカに渡す (たとえば -ls -l-x)
-m メイクファイルの依存情報を生成する
-md 依存情報をオブジェクト ファイルではなく .d ファイルに保存する
-mm 依存情報の生成中はシステムヘッダーファイルを無視する
-mo 依存情報の出力ファイルを指定する
-n オブジェクト ファイルの出力ディレクトリを設定する
-o 出力ファイル名を設定する (-o<ファイル名> または -o <ファイル名> をサポート)
-pxxx Pascal の呼び出し規約を使用
-q コンパイラ識別バナーを表示しない
-r レジスタ変数を使用する
-rd register キーワードが使用された場合にのみレジスタ変数を使用する
-s システムの非インクリメンタル リンカを使ってリンクする
-txxx -Wxxx スイッチの代替名 (差分なし)
* -u アンダースコアを付けてシンボル名を生成する
-vxxx ソース デバッグを有効にする
-w すべての警告を表示する
-w! 警告時にコンパイラから非 0 を返す
-xxxx 例外処理を有効にする
-y デバッグ行番号
-z 標準セグメント名を再定義するオプション
特定オプションとグループ(-Axxx、-Vxxx など)のヘルプの表示
各複数文字オプション -Axxx(言語の互換性と標準への準拠)や -Vxxx(下位互換性)などについてさらに詳しい情報を取得できます。
これを実行するには、-h コマンド ライン オプションをオプション グループの最初の文字に使用します(-Axxx オプションを指定するには -A を使用するなど)。BCC32 によりオプションの指定セットに対するヘルプ トピックのみが表示されます(-Axxx、-Vxxx や -Wxxx など)。
たとえば、-Axxx(言語の互換性と標準への準拠)オプションの説明を表示するには、-h と -A コマンド ライン オプションを使用します。
C:\>bcc32 -h -A C:\Documents and Settings\khouser>bcc32 -h -A C++ 6.20 for Win32 Copyright (c) 1993-2009 Embarcadero 使用できるオプション (* はデフォルトの設定。xxx はサブオプションで、-h -X などで表示) (メモ: -X- または -w-XXX は、通常、-X による設定または設定解除を取り消します) -A ANSI 規格への準拠を有効にする -AF SUN Forte 準拠のキーワードと拡張キーワードを使用 -AG GNU 準拠のキーワードと拡張キーワードを使用 -AK K&R 準拠のキーワードと拡張キーワードを使用 -AT BCC32.EXE 準拠のキーワードと拡張キーワードを使用 (-A- と同じ) -AU UNIX Sysetm V 準拠のキーワードと拡張キーワードを使用 -An C99 準拠のキーワードと拡張キーワードを使用 -Ax C++-0x 準拠のキーワードと拡張キーワードを使用
次の例の BCC32 コマンド ライン ヘルプでは、すべての -Vxxx(下位互換性)オプションについて詳細を表示します。
C:\>bcc32 -h -V C:\Documents and Settings\khouser>bcc32 -h -V C++ 6.20 for Win32 Copyright (c) 1993-2009 Embarcadero 使用できるオプション (* はデフォルトの設定。xxx はサブオプションで、-h -X などで表示) (メモ: -X- または -w-XXX は、通常、-X による設定または設定解除を取り消します) -V 互換オプション -V0 外部 C++ 仮想テーブル -V1 パブリック C++ 仮想テーブル * -VA すべてのグローバル関数を独自の仮想/弱セグメントに生成する -VC シンボルに呼び出し規約をマングルしない -VF MFC 互換 -VF3 MFC 3.2 をサポートする -VF4 MFC 4.0 をサポートする * -VI Microsoft 検索アルゴリズムを使ってヘッダー ファイルを検索する -VM Microsoft Visual C++ 互換 -Va 古いスタイルのクラス引数をサポートする -Vb 旧バージョンの Bcc との下位互換性を有効にする -Vbc 参照への参照、限定参照を破棄しない -Vbe 古い形式の明示的なテンプレート特化を許可 -Vbn const オブジェクトの非 const メンバ関数の呼び出しを許可 -Vbo Borland の古いオーバーロード解決ルールを使用 -Vbr 非 const 参照のバインディングを許可 -Vbs 文字列リテラルを非 const として扱う -Vbt Borland の古いタイプ ルールを 3 番目の演算子に使用 -Vbx 明示的なテンプレート特化をメンバ関数として許可 -Vc コンストラクタのディスプレースメントをサポートする -Vd C++ for 文の古いスコープ規則を使用 -Ve 長さ 0 の空の基底クラス -Vg レキシカル二重音字スキャナを無効にする -Vi 古い 8.3 検索アルゴリズムを使ってヘッダー ファイルを検索する -Vl 古い Borland クラス レイアウトを使用 -Vm メンバ ポインタ オプション -Vmd メンバ ポインタにできる限り短い表現を使用 -Vmm メンバ ポインタの多重継承をサポートする -Vmp メンバ ポインタの宣言での精度を優先する -Vms メンバ ポインタの単一継承をサポートする -Vmv メンバ ポインタがポイントできる位置を制限しない -Vn 新しい演算名 (and、or、and_eq、bitand など) を有効にする -Vo 古いコードに使用される (ほとんど) すべての互換フラグを設定する -Vp Pascal と同様に 'this' を最初にプッシュする -Vr 複数文字定数の順序を逆にする -Vs 古いスタイルの virdef 生成を使用 -Vt オブジェクト レイアウトの前面に仮想テーブル ポインタを置く -Vv '遅い' 仮想ベース ポインタを使用 -Vw マルチバイト文字に対して Unicode でなくネイティブ コードを生成する -Vx 長さ 0 の空のクラス メンバ関数
デフォルト設定
BCC32.EXE には、デフォルトでオンになっている特定のオプションがあります。デフォルトのオプションをオフにしたり、設定ファイルのオプションを上書きするには、オプションの後にマイナス記号(-)を付けてください。
拡張子が .CPP のファイルは C++ ファイルとしてコンパイルされます。拡張子が .C のファイル、拡張子のないファイル、および .CPP、.OBJ、.LIB、.ASM 以外の拡張子を持つファイルは、C ファイルとしてコンパイルされます。
コンパイラは、実行可能ファイルと同じ名前を持ち、拡張子が .DEF であるモジュール定義ファイルとリンクを試みます。
一般的なコンパイラ出力オプション:
| オプション | 説明 | 詳細 |
|---|---|---|
-c |
コンパイルして .OBJ を作成します。リンクは行いません。 |
指定された .C、.CPP、.ASM ファイルをコンパイル、アセンブルしますが、出力される .OBJ ファイルのリンクは行いません。 |
-e <filename> |
実行可能ファイルの名前を指定します。 |
ファイルのリンク時に、実行可能ファイルの名前として <ファイル名> を使用します。このオプションで実行可能ファイルの名前を指定しなかった場合には、リンカは、コマンドに指定された最初のソース ファイルまたはオブジェクト ファイルの名前を元に実行可能ファイルを作成します。 |
-l <x> |
オプションをリンカに引き渡します。 |
このコマンドライン オプションを指定すると、コンパイル コマンドからリンカに オプション <x> が渡されます。コマンドライン オプション -l-x を指定すると、特定のリンカ オプションを無効にすることができます。 |
-M |
MAP ファイルを作成します。 |
このコンパイラ オプションを指定すると、マップ ファイルを作成するようリンカに指示することができます。 |
-o <ファイル名> |
コンパイルした .OBJ の名前を <ファイル名> にします。 |
指定したソース ファイルをコンパイルし、<ファイル名>.OBJ という名前に出力します。 |
-P |
C++ コンパイル |
コンパイラは、すべてのソース ファイルを拡張子に関係なく C++ ファイルとしてコンパイルします。-P- を指定すると、すべての .CPP ファイルを C++ ソース ファイルとして、その他のすべてのファイルを C ソース ファイルとしてコンパイルします。 コマンドライン オプション -Pext を指定すると、コンパイラは、すべてのソース ファイルを C++ ファイルとしてコンパイルし、デフォルトの拡張子を ext で指定したものに変更します。このオプションが提供されているのは、C++ コードのデフォルト拡張子として別の拡張子を使用しているプログラマがいるためです。 オプション -P-ext を付けると、ファイルは拡張子を元にコンパイルされ(.CPP は C++ に、それ以外のすべての拡張子は C に)、デフォルトの拡張子が設定されます(.CPP 以外)。 |
-tWM |
マルチスレッド対応のターゲットを生成します。 |
マルチスレッドの .EXE ファイルまたは .DLL ファイルを作成します。作成しようとしている 32 ビット アプリケーションの種類を指定するモジュール定義ファイル(.DEF ファイル)をコンパイル コマンドやリンク コマンドに含める場合には、このオプションは必要ありません。 |
コンパイラ オプションの優先規則
コマンドライン コンパイラは、左から右の順にオプションを評価し、以下の規則に沿って処理します。
- オプションが重複する場合には(オプション -D、-I、-L、-U を除く)、前のものよりも最後のオプションが優先します。
- コマンドラインで入力されたオプションが、設定ファイルや応答ファイルのオプションよりも優先されます。ただし、-D、-I、-L、-U のオプションは例外で、累積的に使われます。
コマンドライン オプションでのディレクトリの指定
CodeGear C++ コンパイラは、インクルード ファイルやライブラリ ファイルを複数のディレクトリから検索することができます。ライブラリ ディレクトリ オプション(-L)やインクルード ディレクトリ オプション(-I)の構文を使うと、#define オプション(-D)と同じように、そのオプションを複数並べて指定することができます。これらのオプションの構文は次のとおりです。
-L <ディレクトリ名> [<ディレクトリ名>;...]
-I <ディレクトリ名> [<ディレクトリ名>;...]
-L および -I のパラメータ <ディレクトリ名> には、任意のディレクトリまたはディレクトリ パスを指定できます。こういった複数のディレクトリをコマンドラインから入力する方法には、次のようなものがあります。
- 1 つの -L または -I オプションの後に、セミコロンで区切って複数のエントリを並べることができます。
BCC32.EXE —L ディレクトリ名1;ディレクトリ名2;ディレクトリ名3 —I インクルード1;インクルード2;インクルード3 myfile.c
- 各オプションを複数回、コマンドラインに指定することができます。
BCC32.EXE —L ディレクトリ名1 —L ディレクトリ名2 —L ディレクトリ名3 —I インクルード1 —I インクルード2 —I インクルード3 myfile.c
- 2 つの方法を混ぜて使うことも可能です。
BCC32.EXE —L ディレクトリ名1;ディレクトリ名2 —L ディレクトリ名3 —I インクルード1;インクルード2 —I インクルード3 myfile.c
コマンドラインに複数の -L または -I オプションを並べると、累積的に扱われます。コンパイラは、並べられたディレクトリを、左から順に、すべて検索します。
コンパイラ設定ファイル(.CFG ファイル)の使い方
ある一揃いのオプションを繰り返して使用するのであれば、毎回コマンドラインで入力するのではなく、設定ファイルに記述することができます。設定ファイルとは、コマンドライン オプションを含む標準の ASCII テキスト ファイルです。各オプションは、スペースで区切るか新しい行として記述します。
コンパイル コマンドが発行されると必ず、BCC32.EXE は BCC32.CFG という設定ファイルを探します。コンパイラは、まずコンパイル コマンドが発行されたディレクトリで、その次にコンパイラが置かれているディレクトリで .CFG ファイルを探します。
デフォルトの .CFG ファイルを使う他に、複数の設定ファイルを作成して使うことができます。
設定ファイルを使用するには、次の構文でコンパイラ オプションを指定します。
+[パス]ファイル名
たとえば、次のコマンドラインでは、MYCONFIG.CFG という設定ファイルが使われます。
BCC32 +C:\MYPROJ\MYCONFIG.CFG mycode.cpp
コマンドラインでオプションを入力すると、設定ファイルに保存された設定ではなくコマンドライン オプションが使われます。ただし、-D、-I、-L、-U のオプションは例外で、入力したものが先頭に追加されます。
応答ファイルの使い方
応答ファイルを使うと、コンパイラ オプションとファイル名の両方を 1 つのファイルに記述することができます(それに対して、設定ファイルではコンパイラ オプションしか記述できません)。応答ファイルとは、コマンドライン オプションやファイル名を含む標準の ASCII テキスト ファイルです。ファイル内の各エントリは、スペースで区切るか新しい行として記述します。応答ファイルを使うと、コンパイル コマンドを単純化できるだけでなく、ほとんどのオペレーティング システムで許されている以上の長いコマンドラインを発行することができます。
応答ファイルを 1 つ使う場合の構文は次のようになります。
BCC32 @[パス]respfile.txt
複数の応答ファイルを使う場合の構文は次のようになります。
BCC32 @[パス]respfile.txt @[パス]otheresp.txt
応答ファイルの拡張子は、通常は .RSP です。
コマンドラインでオプションを入力すると、応答ファイルのオプションやファイル名ではなくコマンドラインの方が優先されます。ただし、-D、-I、-L、-U のオプションは例外で、入力したものが先頭に追加されます。