Copyright: Borland C++Builder ツールとユーティリティ
Citation: Copyright (c) 1997 Borland International.


Borland C++Builder のツールの概要

Borland C++Builder には，C++ を使ったプログラムの作成を支援する多くのツールが用意されています。

次の表では Borland C++Builder に付属するツールを説明します。

ファイル名	解説

BCC32.EXE	32 ビットコマンドラインコンパイラ

BRC32.EXE	32 ビットリソースコンパイラ

BRCC32.EXE	32 ビットリソースシェル

CPP32.EXE	C プリプロセッサ（32 ビット）

DCC32.EXE	Object Pascal コンパイラ（32 ビット），コマンドラインバージョン

GREP.COM	ファイル検索ユーティリティ

IDETOMAK.EXE	Borland C++ の .IDE プロジェクトファイルを C++Builder の .MAK プロジェクトファイルに変換するユーティリティ

ILINK32.EXE	インクリメンタルリンカ（32 ビット），コマンドラインバージョン

IMPDEF.EXE	ライブラリを使ってアプリケーションを作成するときに使うユーティリティ

IMPLIB.EXE	ライブラリを使ってアプリケーションを作成するときに使うユーティリティ

MAKE.EXE	Make ユーティリティ

TDUMP.EXE	ファイルダンプユーティリティ

TLIB.EXE	スタティックリンクライブラリを保守するユーティリティ

TLINK32.EXE	32 ビットリンカ

TOUCH.EXE	ファイルのタイムスタンプを現在の日時に変更する

TRIGRAPH.EXE	3 文字のトライグラフシーケンスを単一の文字に変更する

WS32.EXE	Windows のメッセージを監視するユーティリティ: 32 ビットバージョン


コマンドラインコンパイラの使い方

関連項目

C++Builder には，Borland C++ のコマンドラインコンパイラ BCC32.EXE が含まれています。

コマンドラインコンパイラの構文

BCC32 の構文は次のとおりです。

BCC32 [<オプション> [<オプション> ...]] <ファイル名> [<ファイル名> ...]

大カッコ [] 内の項目は省略可能

<オプション> はコマンドラインオプションを表す

<ファイル名> はコンパイルするソースコードファイルを表す

共通に使われるコンパイラオプションを一覧表示するには，コマンドラインで BCC32（オプションやファイル名は指定しない）と入力してから〔Enter〕を押します。このリストにはデフォルトで使用可能になっているオプションが表示されます。

コマンドラインコンパイラ名，オプション，ファイル名はそれぞれ 1 つ以上のスペースで区切らなければなりません。また，各オプションの前にはハイフン（-）かスラッシュ（/）を付けます。たとえば，次のように指定します。

BCC32 -Ic:\code\hfiles

コマンドラインにオプションやファイル名を入力すると，環境設定ファイル中の設定値が，入力した値に変更されます。

BCC32 を使うと，ファイルを TLINK（.OBJ ファイル）または TASM32（TASM32 がインストールされていれば .ASM ファイル）に送ることができます。

デフォルト設定

BCC32.EXE にはデフォルトで有効なオプションがあります。デフォルトのオプションを無効にする，または環境設定ファイル内のオプションを無効にするには，オプションの後ろにマイナス符号（-）を付けます。

拡張子のないファイルと .CPP 拡張子を持つファイルは C++ ファイルとしてコンパイルされます。.C 拡張子を持つファイルや，.CPP，.OBJ，.LIB，.ASM 以外の拡張子を持つファイルは C ファイルとしてコンパイルされます。

コンパイラは実行形式ファイルを同じ名前のモジュール定義ファイルを使ってリンクします。別の名前のモジュール定義ファイルを使ってリンクするには，TLINK または TLINK32 を使用しなければなりません。


環境設定ファイルの使い方

関連項目

特定のオプションを何度も使う場合，何度もコマンドラインに入力するかわりに環境設定ファイルに指定できます。環境設定ファイルは標準のテキストファイルであり，1 つまたは複数のコマンドラインを含みます。各オプションはスペースまたは改行で区切られる必要があります。

コンパイルコマンドを実行すると，BCC32.EXE は BCC32.CFG という環境設定ファイルを検索します。コンパイラはまず，ユーザーがコンパイルコマンドを実行したディレクトリで .CFG ファイルを探し，次にコンパイラが格納されているディレクトリで探します。

デフォルトの .CFG ファイルを使う以外に，複数の環境設定ファイルを作成して使うこともできます。環境設定ファイルを使うには，コンパイラオプションを配置する場所で次の構文を使います。

+[<パス>]<ファイル名>

たとえば，MYCONFIG.CFG という環境設定ファイルを使うには，次のようにコマンドラインを入力します。

BCC32 +C:\MYPROJ\MYCONFIG.CFG mycode.cpp

コマンドラインでオプションを入力すると，環境設定ファイルの設定がオーバーライドされます。


レスポンスファイルの使い方
コンパイラレスポンスファイルの使い方

関連項目

レスポンスファイルにはコンパイラオプションおよびファイル名の両方を 1 つのファイルに格納できます（環境設定ファイルはコンパイラオプションのみ）。レスポンスファイルは標準のテキストファイルであり，1 つまたは複数のコマンドラインオプションとファイル名が含まれます。ファイル内の各項目はスペースまたは改行で区切られます。レスポンスファイルを使うと，コンパイルコマンドを簡略化できることに加えて，オペレーティングシステムでは認められない長いコマンドラインが使えるようになります。

レスポンスファイルを 1 つだけ使用する場合の構文は，次のとおりです。

BCC32 @[<パス>]<レスポンスファイル名>

複数のレスポンスファイルを使用する場合の構文は，次のとおりです。

BCC32 @[<パス>]<レスポンスファイル名> @[<パス>]<他のレスポンスファイル名>

Borland C++Builder に付属のレスポンスファイルには .RSP の拡張子が付いています。コマンドラインでオプションを入力すると，レスポンスファイル内のオプションまたはファイル名がオーバーライドされます。


オプションの優先順位規則
コンパイラオプションの優先順位規則

関連項目

コマンドラインコンパイラは，次の規則を適用しながらオプションを左から右に評価します。

同じオプションを重複して入力した場合，-D，-U，-I，または -L 以外のオプションでは，一番右（最後）のオプションがそれ以前のどのオプションよりも優先されます（-D，-U，-I，および -L は累積されます）。

コマンドラインにオプションを入力すると，環境設定ファイルとレスポンスファイルがそのオプションに変更されます。


コマンドラインオプションのディレクトリの入力

関連項目

C++Builder は，複数のディレクトリからインクルードファイルとライブラリファイルを探すことができます。このため，ライブラリディレクトリ（-L）とインクルードディレクトリ（-I）を指定するコマンドラインオプションの構文では，#define オプション（-D）のように，特定のオプションが複数指定できます。これらのオプションの構文は以下のとおりです。

-L ディレクトリ名 [; ディレクトリ名 ;...]

-I ディレクトリ名 [; ディレクトリ名 ;...]

-L や -I に使用するパラメータ "ディレクトリ名" は，どのようなディレクトリまたはディレクトリパスでもかまいません。複数のディレクトリをコマンドラインに入力するには，以下の 3 通りの方法があります。

セミコロンを使って，1 つの -L または -I オプションで複数の項目を記述する

BCC32.EXE -Ldirname1;dirname2;dirname3 -Iinc1;inc2;inc3 myfile.c

次の方法で複数のオプションをコマンドラインに指定する

BCC32.EXE -Ldirname1 -Ldirname2 -Ldirname3 -Iinc1 -Iinc2 -Iinc3 myfile.c

次のように，上の 2 つの方法を混在させて指定する

BCC32.EXE -Ldirname1;dirname2 -Ldirname3 -Iinc1;inc2 -Iinc3 myfile.c

コマンドラインに -L や -I オプションをいくつも指定すると，結果は累積したものになります。つまり，コンパイラは指定されているすべてのディレクトリを左から右に検索します。

注意:	C++Builder 環境でも複数のライブラリディレクトリが指定できます。プロジェクトオプションまたは環境オプションダイアログボックスを使ってディレクトリを入力します。


CPP32： C コンパイラプリプロセッサ

関連項目

CPP32.EXE は，#include ファイルや #define マクロが展開された，C プログラムの（1 ファイル内の）リストを作成します。通常のコンパイルではプリプロセッサを使う必要はありませんが，作成されたリストファイルがデバッグで役に立つ場合があります。

マクロやインクルードファイルの内部でエラーが発生した場合，そのインクルードファイルやマクロ展開の結果を参照できれば，エラーの内容についてより多くの情報を得ることができます。マルチパスコンパイラの多くでは，独立のパスでこの作業を行っており，そのパスの結果を調べることができます。C++Builder は統合単一パスコンパイラを使うので，他のコンパイラの第 1 パスの機能を得るために CPP32 を使います。

各プリプロセッサには，それぞれの出力を制御するコマンドラインオプションがあります。これらオプションのリストを参照するには，コマンドラインで CPP32 と入力します。

CPP32 がファイルを処理するたびに，ソースファイルと同じ名前で拡張子 .I のファイルがカレントディレクトリ（または -n オプションで指定された出力ディレクトリ）に書き込まれます。

この出力ファイルは，ソースファイルとすべてのインクルードファイルの各行を含むテキストファイルです。プリプロセッサ指令の行はすべて除去され，コンパイルから除外される条件テキスト行も除去されています。コマンドラインオプションで特に指定しない限り，テキスト行の前に，そのテキストが格納されていたソースファイルまたはインクルードファイルのファイル名と行番号が付きます。テキスト行の中では，すべてのマクロが展開済みのテキストに置換されています。

CPP32 の結果の出力は，各ソース行にファイル名と行番号が付加されているため，コンパイルできません。しかし，-P- オプションを使うと行番号を持たないファイルを作成でき，そのファイルをコンパイラに渡すことができます。コンパイラでは，-P オプションは C++ コンパイルを強行するのに使用します。


CPP32 の使い方

構文

CPP32 [ オプション ] ファイル（複数可）

コマンドラインオプション

CPP32 で使うオプションは以下のとおりです。

オプション	解説

-Ax	言語拡張を指定する

-C	ネストされたコメントを許可する

-D名前	マクロを定義する

-gnnn	N 度目の警告後に停止する

-innn	識別子の最大の長さを N とする

-Iパス	インクルードファイルのディレクトリ

-jnnn	N 度目のエラー後に停止する

-mm	メモリモデル（デフォルトは s）（16 ビットのみ）

-nパス	出力ファイルのディレクトリ

-oファイル名	出力ファイル名

-p	Pascal の呼び出し規約

-P	ソース行情報を含む（デフォルトは有効）

-Sk	エラーが発生しても出力ファイルを削除しない

-Sd	マクロの定義文/定義解除文を出力する

-U名前	マクロの定義を無効にする

-w	すべての警告を有効にする

-w-xxx	警告 xxx を無効にする

-wxxx	警告 xxx を有効にする


マクロプリプロセッサとしての CPP32

-P オプションを使うと，各行の頭にソースファイル名と行番号が付きます。-P- オプションを使うと，CPP32 をマクロプリプロセッサとして使えるようになります。この場合，結果の .I ファイルは，BCC32 でコンパイルできます（BCC32 の -P オプションを使ってデフォルトのファイル拡張子を設定できることに注意してください）。

次のプログラムでは，まず -P，次に -P- を選択して，CPP32 がどのようにファイルを処理（プリプロセス）するかを示しています。

ソースファイル: HELLOFB.C

#define NAME "Frank Borland"

#define BEGIN {

#define END   }

main()

BEGIN

  printf("%s\n", NAME);

END

CPP32 コマンドライン: CPP HELLOFB.C

出力:

HELLOFB.c 1:

HELLOFB.c 2:

HELLOFB.c 3:

HELLOFB.c 4:

HELLOFB.c 5: main()

HELLOFB.c 6: {

HELLOFB.c 7:    printf("%s\n","Frank Borland");

HELLOFB.c 8: }

CPP32 コマンドライン: CPP -P- HELLOFB.C

出力:

main()

{

printf("%s\n","Frank Borland");

}


CPP32.EXE と MIDL の使い方

MIDL (Microsoft Interface Definition Language) は，RPC コンパイラです。Borland C++ のプリプロセッサで MIDL を使うためには，下記の MIDL コマンドを使う必要があります。

MIDL -cpp_cmd {CPP32} -cpp_opt "-P- -oCON {CPP32 options}" {MIDL options} {.idl/.acf}

オプション	解説

-cpp_cmd {CPP32}	.IDL ファイルまたは .ACF ファイルを処理するときにどのプリプロセッサを使うかを MIDL に指示します。MIDL は，そのプリプロセッサを呼び出して，ソースファイル内のマクロを展開します

-cpp_opt "{options}"	プリプロセッサのコマンドラインオプションを指定します。-P- オプションを使うと，プリプロセス後の出力の行から行番号とファイル名の情報が取り除かれます。-oCON は，プリプロセス後の出力を，ファイルではなく標準出力に送ることを示します。プリプロセッサの見出しと現在処理中のファイルは送られません。プリプロセッサが処理する .CFG ファイルに -oCON を含めると，見出しを送ることができます

{CPP32 options}	オプションを CPP32 に渡します

{MIDL options}	任意の MIDL コマンドラインオプションです

{.idl/.acf file}	MIDL が処理するソースファイルです


CPP と UUID
CPP32 と UUID

場合によっては，CPP32 が有効な UUID を受け入れないことがあります。たとえば，有効な UUID 文は次のとおりです。

uuid(5630EAA0-CA48-1067-B320-00DD010662DB)

ただし，CPP32 が 5630EAA0 を見つけると，これが浮動小数点数として分類されますが，無効な浮動小数点数なのでプリプロセッサがエラーを引き起こします。この問題を回避するには，UUID を引用符で囲み，MIDL オプション -ms_ext を使います。UUID 文は次のようになります。

uuid("5630EAA0-CA48-1067-B320-00DD010662DB")

また，MIDL コマンドラインは次のようになります。

MIDL -ms_ext -cpp_cmd {CPP32} -cpp_opt "-P- -oCON {CPP32 options}" {MIDL options} {.idl/.acf file}


GREP（テキスト検索ユーティリティ）

関連項目

GREP（Global Regular Expression Print）は，同じ名前の UNIX ユーティリティから派生した強力なテキスト検索プログラムです。GREP は，1 つまたは複数のファイルもしくは標準入力ストリームでテキストパターンを検索します。

GREP を使った例を次に示します。カレントディレクトリのどのファイルに文字列「Bob」があるのか知りたい場合，次のように入力します。

grep Bob *.txt

GREP は，文字列「Bob」を含むファイルがあれば，そのそれぞれの行の一覧を表示します。GREP は，デフォルトでは大文字と小文字を区別するので，文字列「bob」と「Bob」は一致しません。

GREP にできるのは，1 つの固定した文字列の検索だけではありません。GREP 関連のトピックでは特定のパターンに一致する文字列を検索する方法について説明しています。


GREP のコマンドラインの構文

関連項目

GREP の基本的なコマンドラインの構文は次のとおりです。

grep [- オプション ] 検索文字列 [ ファイル (複数可) ... ]

オプション	解説

オプション	ハイフン（-）の後に続く 1 文字以上の文字からなり，GREP の動作を変更します

検索文字列	検索するパターンを指定します

ファイル	検索するファイルを指定します（ファイルを指定しない場合，GREP は標準入力を検索します。このため，パイプやリダイレクションを利用することができます）

GREP ? というコマンドを使うと，GREP のオプション，特殊文字，およびデフォルトを示すヘルプ画面が表示されます。

GREP からの出力をリダイレクトする

GREP の結果が 1 画面におさまらない場合，出力をファイルにリダイレクトすることができます。たとえば，

GREP "Bob" *.txt > temp.txt

というコマンドを使うと，カレントディレクトリにある拡張子が TXT のすべてのファイルを検索し，その結果を TEMP.TXT（この名前はユーザーが自由に指定できます）に書き込めます。適当なワードプロセッサを使って TEMP.TXT（検索結果）を見てください。


GREP のコマンドラインオプション

関連項目

コマンドラインで GREP ユーティリティにオプションを渡すには，ハイフン（-）に続く 1 文字以上の文字を指定します。個々の文字は，オンまたはオフすることができるスイッチです。プラス記号（+）を文字の後に付けると，そのオプションがオンになります。ハイフン（-）を文字の後に付けると，そのオプションがオフになります。プラス記号は任意指定です。たとえば，-r は，-r+ と同じです。複数のオプションを別々に指定する（たとえば -i -d -l）ことも，オプションを組み合わせる（たとえば，-ild，-il -dなど）こともできます。

GREP のオプション文字とその文字の一覧を示します。

オプション	解説

-c	回数のみ。一致した行の数だけを表示します。少なくとも 1 行は一致する行があるファイルのそれぞれについて，ファイル名と一致した行数を表示します。一致した行そのものは表示しません。このオプションは，デフォルトでオフになっています

-d	サブディレクトリも検索。コマンドラインで指定されたファイルのそれぞれについて，指定されたディレクトリと，そのディレクトリのすべてのサブディレクトリで，ファイル指定と一致するすべてのファイルを検索します。パスなしでファイルを指定すると，そのファイルはカレントディレクトリにあるものと仮定します。このオプションは，デフォルトでオフになっています

-i	大文字小文字を区別しない。大文字と小文字の差を無視します。このオプションがオンになっていると，a から z までの文字のすべてが，A から Z までの対応する文字と同一と見なされます。このオプションは，デフォルトでオフになっています

-l	ファイル名のみ一覧表示。一致する行があるファイルの名前だけを表示します。一致する文字が見つかると，ファイル名を表示し，ただちに次のファイルの処理に移ります。このオプションは，デフォルトでオフになっています。

-n	行番号。一致した行を表示する際に，行の前に行番号を表示します。このオプションは，デフォルトでオフになっています。

-o	UNIX 出力フォーマット。一致する行の出力フォーマットを変更して，UNIX スタイルのコマンドラインパイプ処理をサポートしやすくします。各行の先頭に，一致する行を含むファイルのファイル名が出力されます。このオプションは，デフォルトでオフになっています。

-r	正規表現検索。検索文字列によって定義されるテキストを，リテラル文字列ではなく正規表現として扱います。このオプションは，デフォルトでオンになっています。正規表現とは，1 つまたは複数の文字の 1 回以上の繰り返しで，引用符で囲むこともできます。下記の記号は，特別な意味を持ちます。

^  行頭	$  行末

.  任意の文字	\  次の文字をリテラルとして扱う

*  0 回以上の繰り返し	+  1 回以上の繰り返し

[aeiou0-9]	a，e，i，o，u，または 0～9 と一致

[^aeiou0-9]	a，e，i，o，u，および 0～9 以外と一致

-u	オプション更新。コマンドラインのオプションを，GREP.COM のデフォルトオプションに追加します。このオプションを使うと，デフォルトのオプション設定をカスタマイズできます。GREP.COM のデフォルト設定を調べるには，GREP ? と入力します。入力するとヘルプ画面のオプションに，デフォルト設定に応じて + 記号または - 記号が付きます。

-v	不一致。一致しない行だけを表示します。検索文字列を含まない行が，一致しない行とみなされます。このオプションは，デフォルトでオフになっています。

-w	ワード検索。正規表現に一致するテキストは，その直前および直後の文字が 1 単語の一部でない場合に限って一致するとみなされます。デフォルトの単語文字セットには，A から Z までと，0 から 9 までと，下線記号（_）が含まれます。このオプションは，デフォルトでオフになっています。このオプションのもう 1 つの形式では，単語文字の集合を指定することができます。その形式は，-w[セット] で，「セット」は有効な正規表現です。

アルファベット文字でセットを定義した場合，セット内の文字のそれぞれについて，大文字と小文字の両方を含むものとして集合が自動的に定義されます。これは，入力した文字に無関係で，検索が大文字小文字を区別するかどうかにも無関係です。-w オプションと -u オプションを組み合わせて使うと，単語文字の新しい集合をデフォルト集合として保存できます。

-z	詳細表示。検索したファイルのすべてのファイル名を表示します。一致する行の前に行番号を付けます。ファイルごとに一致した行数を表示します（行数がゼロの場合でも）。このオプションは，デフォルトでオフになっています。

?	GREP のオプション，特殊文字，およびデフォルトを示すヘルプ画面を表示します。


GREP の検索文字列

関連項目

検索文字列の値が，GREP が検索するパターンを定義します。検索文字列は，正規表現またはリテラル文字列のどちらかです。

正規表現では，特定の文字が特殊な意味を持ちます。これらの文字は，検索を制御する演算子です。

リテラル文字列では，演算子がありません。文字のそれぞれが，その文字そのものとして扱われます。

タブやスペースをデリミタとして扱われないようにするためには，検索文字列を引用符で囲みます。検索文字列と照合されるテキストは，行の境界をまたぐことができません。すなわち，パターンに一致するテキストは，必ず 1 行の中に収まっていなければなりません。

正規表現は，単一の文字，または大カッコで挟まれた文字の集合のいずれかです。正規表現を連結したものも，正規表現です。

-r オプション（デフォルトでオン）を使うと，検索文字列は，リテラル表現ではなく正規表現として扱われます。下記の文字には，特殊な意味があります。

記号	解説

 ^	表現の先頭にあるアクセント記号は，行の先頭と一致します

 $	表現の末尾にあるドル記号は，行末と一致します

 .	ピリオドは，任意の文字と一致します

 *	文字列の後のアスタリスクは，その文字列とその後の任意の個数（0 個を含む）の任意の文字と一致します。たとえば，bo* は，b，boo と一致し，bo とも一致します

 +	文字列の後のプラス記号は，その文字列とその後の任意の個数（0 個を除く）の任意の文字と一致します。たとえば，bo+ は，bo や boo とは一致しますが，b とは一致しません

[ ]	大カッコの中の文字は，そのカッコ内にある文字のどれか 1 つと一致します。たとえば，[bot] は，b，o，または t と一致します

[^]	大カッコの中の文字列の先頭にあるアクセント記号は，NOT を意味します。したがって，[^bot] は，b，o，または t 以外の任意の 1 文字と一致します

[-]	大カッコの中のハイフンは，文字の範囲を表します。たとえば，[b-o] は，b から o までの任意の 1 文字と一致します

 \  	ワイルドカード文字の前に円記号があると，その文字はワイルドカードではなく，文字そのものとして扱われます。たとえば，\^ は ^ と一致し，行の先頭には一致しません

特殊記号のうちの 4 つ（$，.，*，および +）は，大カッコの中では特殊な意味を持ちません。文字 ^ が特別扱いされるのは，集合定義の始まりの直後（[ 記号の直後）にある場合だけです。


GREP でのファイルの指定

関連項目

ファイルオプションで，GREP に検索するファイルを通知します。ファイルは，明示的なファイル名でも，DOS のワイルドカードの ? または * を含む包括的なファイル名でもかまいません。さらに，パス（ドライブとディレクトリの情報）を指定することもできます。パスを指定しないでファイルをリストすると，GREP はカレントディレクトリを検索します。ファイルをまったく指定しない場合，GREP への入力をリダイレクション（<）またはパイプ（|）から与える必要があります。


GREP の使い方の例

関連項目

下記の例で，GREP の機能を組み合わせて，さまざまな検索を行う方法を示します。ここでは，GREP のデフォルト設定が変更されていないものとします。

grep -r [^a-z]main\ *( *.c

grep -ri [a-c]:\\data\.fil *.c *.inc

grep "search string with spaces" *.doc *.c

grep -rd "[ ,.:?'\"]"$ \*.doc

grep -w[=] = *.c


GREP の使い方の例 1

関連項目

コマンド

grep -r [^a-z]main\ *( *.c

一致

main(i,j:integer)

if (main  ()) halt;

不一致

mymain()

if (MAIN  ()) halt;

解説

この検索文字列は，直前に小文字がなく（[^a-z]），直後に 0 個以上のスペース（\ *）があり，その後に左カッコがある単語 main を検索することを示しています。スペースとタブは，通常はどちらもコマンドラインデリミタとみなされるので，正規表現の一部としてこれらを含める場合には，引用符で囲むか円記号を前に付ける必要があります。この例では，main の後のスペースに，エスケープ文字の円記号を付けています。二重引用符の中にスペースを入れても，同じ結果になります。


GREP の使い方の例 2

関連項目

コマンド

grep -ri [a-c]:\\data\.fil *.c *.inc

一致

A:\data.fil

B:\DATA.FIL

c:\Data.Fil

不一致

d:\data.fil

a:data.fil

解説

円記号（\）とピリオド（.）は，パスやファイル名でも特別な意味を持つので，パスやファイル名を検索したい場合には，この文字の前にエスケープ文字の円記号を入れる必要があります。ここでは -i オプションを使っているので，この検索は大文字と小文字を区別しません。


GREP の使い方の例 3

関連項目

コマンド

grep "search string with spaces" *.doc *.c

一致

This is a search string with spaces in it.

不一致

This search string has spaces in it.

解説

スペースを含む文字列を検索します。


GREP の使い方の例 4

関連項目

コマンド

grep -rd "[ ,.:?'\"]"$ \*.doc

一致

He said hi to me.

Where are you going?

In anticipation of a unique situation,

Examples include the following:

"Many men smoke, but fu man chu."

不一致

He said "Hi" to me

Where are you going? I'm headed to the

解説

この例では，行末に �.:?�, のうちのどれかがある行を探します。大カッコの中の二重引用符は，前にエスケープ文字があるので，文字列の引用の終りではなく，通常の文字として扱われます。また，$ 記号は，引用符で囲まれた文字列の外側にあります。これは，正規表現を連結して長い表現を作る方法の例です。


GREP の使い方の例 5

関連項目

コマンド

grep -w[=] = *.c

一致

i = 5;

j=5;

i += j;

不一致

if (i == t) j++;

/* =================== */

解説

この例では，単語を構成する文字の集合を代入演算子（=）だけに再定義してから単語検索を行っています。これは，等号（=）を 1 つだけ使う C の代入文と一致しますが，等号を 2 つ使う等価比較（==）には一致しません。


IDETOMAK.EXE の使い方

IDETOMAK は，Borland C++ 5.0 の .IDE プロジェクトファイルを同等な C++Builder のプロジェクト .MAK ファイルに変換するユーティリティです。

Borland C++ の .IDE プロジェクトファイルは，C++Builder で使用できるよりも複雑なプロジェクトを記述できるので，IDETOMAK は以下のガイドラインに沿って最善のメイクファイルを作成します。

Borland C++ のプロジェクトでは複数のターゲットを指定できますが，C++Builder のプロジェクトファイルではターゲットは 1 つしか指定できません。そのため，IDETOMAK は Borland C++ プロジェクトファイルの各ターゲットごとに別々の .MAK ファイルを作成します。

C++Builder のターゲットにリンクされるライブラリは，C++Builder のマルチスレッドライブラリを使うように変更されます。特に，リンクされる RTL は cp32mt.lib または cp32mti.lib のどちらかになります。

OWL ライブラリを使うアプリケーションは，owlwv.lib，owlwvi.lib，または owl52v.dll を使うように変更されます。同様に BIDS ライブラリは bidsv.lib，bidsvi.lib，または bds52v.dll への参照に変更されます。

これらのライブラリファイルは，Borland C++ 5.02 CD のインストールイメージに入っています（これらは自動的にはインストールされないので，CD から直接コピーする必要があります）。

インクルードパス，ライブラリパス，およびマクロ定義における環境変数への参照は，プロジェクトファイルが変換されるときに展開されます。これは，環境変数 BCROOT を使っている場合には特に重要です。使用している環境に BCROOT がない場合，生成されるメイクファイルには無効なエントリが含まれることがあります。このような状況では，IDETOMAK は警告を発します。

C++Builder は個別のファイルで指定されているオプションを処理する機能を持っていません。IDETOMAK は .IDE プロジェクトファイル内のノードで指定されているオプションのローカルオーバーライドがあった場合，そのローカルオーバーライドを無視して警告を発します。

プロジェクトファイル内のソースプールは破棄され，C++Builder のメイクファイルにはソースプールに関する記述はなくなります。

複数のソースモジュールがあるプロジェクトでは，メインソースモジュール（プロジェクトソースと呼ばれる）は .MAK ファイル内の一連のマクロをインクルードするように変更されます。これらのマクロは，必要な .OBJ ファイルを MAKE に取り込むように C++Builder に指示します。プロジェクトソースは，.IDE ファイルと同名で拡張子が .CPP のファイルであると想定されます。そのような名前のファイルがない場合は自動的に作成され，リンクされる .obj ファイルがすべて取り込まれます。その名前のファイルがあった場合，IDETOMAK で変更される前にバックアップが作成されます。このファイルに対する追加は，すべてファイルの先頭に加えられます。

リソースファイルを使用するプロジェクトでは，プロジェクトソースモジュールは上記と同様に，C++Builder のリソースを取り込む特殊なマクロが挿入されます。

生成される C++Builder のメイクファイル内のリンカ設定は，デフォルトでは TLINK32 になります。

コンパイラオプションに追加されるインクルードパスでは，元のプロジェクトファイルで設定されているパスの前に $(BCB)\include;$(BCB)\include\vcl が追加されます。

リンカオプションに追加されるライブラリパスでは，元のプロジェクトファイルで設定されているパスの前に $(BCB)\lib;$(BCB)\lib\objs が追加されます。


IMPLIB の使い方

関連項目

IMPLIB ユーティリティはインポートライブラリを作成します。IMPLIB は，入力として DLL かモジュール定義ファイル，またはその両方を取り込み，出力としてインポートライブラリを作成します。IDE は DLL ターゲットのためのトランスレータとして IMPLIB を使用します。

Windows アプリケーションを作成したことがあるならば，少なくとも 1 つのインポートライブラリ，つまり標準の Windows DLL のインポートライブラリである IMPORT32.LIB を使っています（IMPORT32.LIB は，IDE で Windows アプリケーションを作成する場合や BCC32 でリンクする場合に自動的にリンクされます。TLINK32 を使って単独でリンクを行う場合のみ明示的に IMPORT32.LIB を指定してリンクしてください）。

インポートライブラリには，1 つ以上の DLL の一部またはすべてのエクスポート関数のリストが記述されます。IMPLIB は，直接 DLL から，または DLL のモジュール定義ファイルから（またはこの 2 つの方法を組み合わせて）インポートライブラリを作成します。

DLL のインポートライブラリの作成

オプションは必ず小文字にし，前にハイフンかスラッシュを付けます。

次のように入力します。

IMPLIB オプション  ライブラリ名 [ 定義ファイル ...｜ DLL... ] [@レスポンスファイル]

ここで，オプションは 1 つ以上の IMPLIB オプションのリストで，ライブラリ名は新しく作成するインポートライブラリの名前です。定義ファイルは 1 つ以上の DLL 用にすでに作成された 1 つ以上のモジュール定義ファイルのリストで，DLL はすでに作成されている 1 つ以上の DLL のリストです。少なくとも 1 つの DLL かモジュール定義ファイルを指定する必要があります。

レスポンスファイルを使って，処理する .DEF ファイルと .DLL ファイルを一覧表示することもできます。レスポンスファイルは，ファイルのリストを含むテキストファイルです。レスポンスファイル内で，ファイルはスペースまたは改行で区切る必要があります。コマンドラインでレスポンスファイルを指定するには，符号 @ の後にレスポンスファイル名を入力します。たとえば次のように入力します。

implib  foo.lib  @respon.txt

注意:	DLL の拡張子には，.DLL だけでなく .EXE や .DRV も使用できます。

オプション	機能

-c	大文字と小文字のみが異なるシンボルに対する警告を表示しない

-f	名前を使ってインポートを行う

-i	IMPLIB に WEP を無視させる。WEP は，DLL を終了させるために必要な Windows 終了プロシージャ。IMPLIB コマンドラインで複数の DLL を指定しているときにこのオプションを使う

-o	モジュールの拡張子を取り除く（16ビット Windows のみ）

-w	警告を表示させないようにする


モジュール定義ファイルマネージャの使い方(IMPDEF)

関連項目

インポートライブラリは Windows DLL の関数へのアクセスを提供します。

IMPDEF は入力として DLL 名を取り込み，出力として DLL がエクスポートする関数名の記述されたエクスポートセクションを含むモジュール定義ファイルを作成します。

構文は次のとおりです。

IMPDEF 出力ファイル名.DEF 入力ファイル名.DLL

これを実行すると，入力ファイル名.DLL からモジュール定義ファイルが 出力ファイル名.DEF で作成されます。作成されるモジュール定義ファイルは次のようになります。

LIBRARY     ファイル名

DESCRIPTION '説明'

EXPORTS

            エクスポート関数名              @序数

        .

        .

        .

            エクスポート関数名              @序数

ここで，

ファイル名は DLL のファイル名からパスと拡張子を取り除いたもの

説明は DLL が DESCRIPTION 文を記述したモジュール定義ファイルとすでにリンクされている場合の DESCRIPTION 文の値

エクスポート関数名はエクスポートされている関数の名前

序数はその関数の順序数の値（整数）


DLL のクラス

関連項目

IMPDEF は C++ クラスを使用する DLL にとって有効です。クラスを定義するときに _export キーワードを使うと，そのクラスに対する非インラインメンバー関数と静的データメンバーがすべてエクスポートされます。IMPDEF はエクスポートされた関数をすべて列挙し，自動的にメンバー関数や静的データメンバーを取り込むので，IMPDEF を使うとモジュール定義ファイルを作成するのが簡単になります。

このような場合の関数の名前は変形されているので，モジュール定義ファイルからインポートライブラリを作成するためだけにモジュール定義ファイルの EXPORTS セクションに全関数名を列挙するのは厄介です。IMPDEF を使ってモジュール定義ファイルを作成すれば，エクスポートされた関数それぞれの順序数が取り込まれます。エクスポートされた名前が変形されていると，関数のエントリの後にコメントとして変形されていない元の関数名も取り込まれます。したがって，C++ クラスを使用する DLL に対して IMPDEF で作成したモジュール定義ファイルは次のようになります。

LIBRARY     ファイル名

DESCRIPTION '説明'

EXPORTS

            変形されたエクスポート関数名  @序数 ; エクスポート関数名

        .

        .

        .

            変形されたエクスポート関数名  @序数 ; エクスポート関数名

ここで，

ファイル名は DLL のファイル名からパスと拡張子を取り除いたもの

説明は DLL が DESCRIPTION 文を記述したモジュール定義ファイルとすでにリンクされている場合の DESCRIPTION 文の値

変形されたエクスポート関数名は変形された名前

序数はその関数の順序数の値（整数）

エクスポート関数名は関数の元の名前


DLL の関数

関連項目

IMPDEF は，DLL のすべてのエクスポート関数のリストを記述した編集可能なソースファイルを作成します。この .DEF ファイルを編集して，特定のアプリケーションで利用したい関数だけを含むように編集してから，この編集した .DEF ファイルで IMPLIB を実行できます。この結果，DLL のエクスポート関数の特定なアプリケーションに必要な関数に関するインポート情報のみを含むインポートライブラリを作成することができます。

複数のアプリケーションで使用される関数を提供する DLL を作成し配布する場合について考えています。すべてのエクスポート関数は _export で定義されています。まず，すべてのアプリケーションが DLL のすべてのエクスポート関数を使うとすれば，IMPLIB を使って DLL に対してインポートライブラリを 1 つ作ればよいのです。DLL とともにこのインポートライブラリを配布でき，インポートライブラリは DLL のすべてのエクスポート関数のインポート情報を提供します。このインポートライブラリはどのアプリケーションともリンクできるので，特定のアプリケーションで使うすべての DLL 関数をモジュール定義ファイルの IMPORTS セクションに列挙する必要はありません。

今度は，DLL のいくつかのエクスポート関数だけを特定のアプリケーションに提供したいものとします。このアプリケーションは，アプリケーションが使用する関数のサブセットだけのインポート情報を提供するようにカスタマイズしたインポートライブラリでリンクするのが最適です。DLL のほかのエクスポート関数は，すべてこのクライアントアプリケーションに対して隠されたものとなります。

このような条件を満足するインポートライブラリを作成するには，コンパイルとリンクが済んだ DLL に対して IMPDEF を実行します。IMPDEF は，DLL のすべてのエクスポート関数を列挙した EXPORTS セクションを含むモジュール定義ファイルを作成します。このモジュール定義ファイルを編集し，カスタマイズするインポートライブラリでは，不要な関数に対応する EXPORTS セクションのエントリを削除します。このモジュール定義ファイルに対して IMPLIB を実行すると，作成されたインポートライブラリには，モジュール定義ファイルの EXPORTS セクションに列挙したエクスポート関数だけに関するインポート情報が含まれます。


TLIB の使い方

関連項目

Turbo C++ にはコマンドラインツールは含まれていません。

既存のライブラリを変更するとき，TLIB は常に元のライブラリをコピーし，.BAK 拡張子を付けて保存しておきます。

ライブラリの作成または変更

Borland C++ に含まれるライブラリは，TLIB を使って作成されたものです。TLIB を使うと，ユーザー自身のライブラリの変更を行ったり，Borland C++ のライブラリ，ユーザーが作成したライブラリ，ほかのプログラマが作成したライブラリ，または購入した市販のライブラリを変更したりできます。

さらに，以下のことも行えます。

オブジェクトモジュールのグループから新しいライブラリを作成する

既存のライブラリへオブジェクトモジュールやほかのライブラリを追加する

既存のライブラリからオブジェクトモジュールを削除する

既存のライブラリのオブジェクトモジュールを置き換える

既存のライブラリからオブジェクトモジュールを抽出する

新規または既存のライブラリの内容を一覧表示する

TLIB は，リンクを高速化するために使われる拡張辞書も作成できます（そしてライブラリファイルの中に取り込みます）。

Borland C++ で実行形式プログラムを作成する上で TLIB は必ずしも必要なものではありませんが，大きな開発プロジェクトには欠かせない，便利なツールです。


TLIB コマンドラインオプション

関連項目

Turbo C++ にはコマンドラインツールは含まれていません。

TLIB コマンドラインの一般形式は次のとおりです。大カッコの中の項目は省略可能です。

tlib [@レスポンスファイル] [オプション] ライブラリ名 [演算子] [，リストファイル]

TLIB オプション

TLIB オプションのオンライン要約を表示するには，TLIB と入力して〔Enter〕を押します。

オプション	機能

@レスポンスファイル	取り込むレスポンスファイルのパスおよび名前。複数のレスポンスファイルの指定が可能

ライブラリ名	作成または管理するライブラリのパス名。どの TLIB コマンドにも必ずライブラリ名を指定する。ワイルドカードの指定は不可。拡張子を省略すると，拡張子 .LIB を指定したものとみなされる。BCC および IDE では .LIB 拡張子でライブラリファイルを認識するため，拡張子は .LIB のみを使用。

注意:	指定された名前のライブラリがない場合に ＋ 演算子が指定されていると，TLIB はライブラリを新規作成する

/C	大文字と小文字を区別するフラグ。通常このオプションは使用しない

/E	拡張辞書を作成する

/Psize	ライブラリのページサイズを size に設定する

/0	コメントレコードの削除

演算子リスト	TLIB が実行する演算子のリスト。演算子の順序は任意。単にライブラリの内容を調べたい場合は演算子を使わない

リストファイル	ライブラリの内容のリストを出力するファイルの名前。リストファイル名を指定する場合は，前にカンマを付けなければならない。ファイル名を指定しないとリストは作成されない。リストは各モジュールのアルファベット順に表示される。各モジュールのエントリには，そのモジュールの中で定義された各パブリックシンボルのアルファベット順のリストが含まれる。リストファイルのデフォルトの拡張子は .LST。リストは，リストファイル名として CON を使うと画面に出力でき，PRN を使うとプリンタに出力できる


TLIB レスポンスファイルの使い方

関連項目

Turbo C++ にはコマンドラインツールは含まれていません。

たくさんのアクション記号を使う場合，あるいは何度も同じ操作を繰り返すような場合にはレスポンスファイルを利用すると便利です。レスポンスファイルは ASCII テキストファイル（Borland C++ のエディタで作成できます）であり，TLIB コマンドのすべてあるいはその一部を記述します。TLIB レスポンスファイルを使うと，コマンドライン 1 行に入りきらない長い TLIB コマンドを作成できます。レスポンスファイルでは以下のことが可能です。

複数行のテキストを記述できる。行末にアンド記号 (&) を置いて次の行に指定が続くことを示す

コマンドリストの一部を取り込める。コマンドラインのオプションとレスポンスファイルのオプションの結合が可能

1 つの TLIB コマンドラインで複数のレスポンスファイルが使用可能


TLIB /C オプション

関連項目

Turbo C++ にはコマンドラインツールは含まれていません。

ライブラリでの大文字と小文字を区別するシンボルの使用

ライブラリにモジュールを追加するとき，TLIB はライブラリのモジュールで定義されているすべてのパブリックシンボルの辞書を保守します。ライブラリ内のすべてのシンボルが重複しないようにする必要があります。シンボルが重複するようなモジュールをライブラリに追加しようとすると，TLIB はエラーメッセージを表示し，このモジュールを追加しません。

通常，TLIB がライブラリ内のシンボルの重複をチェックするとき，大文字と小文字の区別はしません（たとえば，シンボル lookup と LOOKUP は重複シンボルとして扱われません）。/C オプションを使って文字の大小だけが異なるシンボルを含むモジュールをライブラリに追加できます。

ライブラリをほかのリンカで使ったりほかの人が使うことがある場合は，/C を使用しないでください。

TLIB は通常，大文字と小文字の違いがあるだけでも，シンボルを受け付けません。その理由は，リンカによっては大文字と小文字の区別をしないものがあるからです。TLINK では，シンボルの大文字と小文字を区別しても問題は起こりません。TLINK でのみライブラリを使う場合は，TLIB /C オプションを使っても何も問題はありません。


TLIB /E オプション

関連項目

Turbo C++ にはコマンドラインツールは含まれていません。

拡張辞書の作成

TLIB を使って拡張辞書を作成し，これをライブラリファイルに追加すると，大規模なリンクの際，TLINK の能力が向上し，大規模なリンクが可能になります。この辞書には標準のライブラリ辞書には含まれない情報がコンパクトな形で入っています。TLINK は，この情報を使ってライブラリファイルの前処理を行えば不要なモジュールの前処理を行わずに済みます。

更新しようとするライブラリの拡張辞書を作成するには，ライブラリにモジュールを追加，削除，置換するために TLIB を起動するときに /E オプションを使います。更新しない既存のライブラリにも /E オプションを使って拡張辞書を作成できます。たとえば，次のように入力すると，TLIB は指定されたライブラリに拡張辞書を追加します。

tlib /E mylib

リンク時に "Table limit exceeded" というメッセージが表示されたら，/E オプションを使ってみてください。


TLIB /P オプション

関連項目

Turbo C++ にはコマンドラインツールは含まれていません。

大きなライブラリを作成するためのページサイズの設定

すべての DOS ライブラリファイルには，.LIB ファイルの最後，つまりすべてのオブジェクトモジュールの後ろに辞書が入っています。この辞書には，ライブラリの各モジュールごとに，.LIB ファイル内でのそのモジュールの 16 ビットアドレスが記述されています。このアドレスはライブラリのページサイズ（デフォルトは 16 バイト）を単位として示されます。

ライブラリのページサイズによって，ライブラリ中のすべてのオブジェクトモジュールを結合した最大の大きさが決まります。ページ数は 65,536 を超えられません。デフォルト（および最小）のページサイズは 16 バイトであるため，この場合ライブラリのサイズは約 1MB まで可能です。より大きなライブラリを作成するには，/P オプションを使ってページサイズを大きくします。ページサイズは 2 の累乗とし，最小値は 16，最大値は 32,768 です。

ライブラリ中のモジュールは，すべてページ境界で始まる必要があります。たとえば，ページサイズが 32（デフォルトの 16 より大きい最小のページサイズ）のライブラリでは，各オブジェクトモジュールの間に平均 16 バイトの未使用領域が存在することになります。指定されたページサイズでは作成できない，大きなライブラリを作成しようとすると，TLIB はエラーメッセージを出力し，/P を使ってもう一段階上の大きさのページサイズを指定するように促します。


演算子リスト

関連項目

Turbo C++ にはコマンドラインツールは含まれていません。

演算子リストには TLIB に行わせたいアクションを記述します。リストは，順に並べた記号で構成します。各記号は，1 文字または 2 文字のアクション記号とそれに続くファイル名またはモジュール名で構成します。アクション記号の前後，またはファイル名やモジュール名の前後にはホワイトスペースを置けますが，2 文字のアクション記号の間や名前の途中には挿入できません。

コマンドラインには，DOS の COMMAND.COM での 1 行の長さの限界である 127 文字を超えない限りアクション記号をいくつ並べてもかまいません。アクション記号の順序は重要ではありません。TLIB は常に次の特定の順序で演算子を使います。

モジュールを置き換える場合，古いモジュールを削除してから新しいモジュールを追加します。

1.	最初にすべての抽出操作を行います。

2.	次にすべての削除操作を行います。

3.	最後にすべての追加操作を行います。

TLIB は，指定されたファイル名からドライブ名，パス名，拡張子の情報をすべて取り除いたものをモジュール名とします。

TLIB は常に適切なデフォルトを想定することに注意してください。たとえば，カレントディレクトリにある拡張子が .OBJ のモジュールを追加するには，モジュール名だけを指定すればよく，パス名と .OBJ 拡張子は必要ありません。

ファイル名やモジュール名にワイルドカードを使用することはできません。

ファイル名に + か - が含まれている場合には，ファイル名を二重引用符（"）で囲んでください。

TLIB は 3 つのアクション記号 (-，+，*) を認識します。この記号は単独で，あるいは 2 つを組み合わせて，合計で 5 つの異なる動作を指定できます。2 つの文字を組み合わせて動作を指定する場合，文字の順序は任意です。以下の表にアクション記号とその機能を示します。

モジュールの追加先をまだ存在していないライブラリにすると，このライブラリが新規作成されます。

TLIB のアクション記号

記号 	名前	機能

+	追加	指定したファイルをライブラリに追加する。ファイルの拡張子を省略すると，拡張子 .OBJ を指定したものとみなされる。このファイル自身がライブラリ（拡張子が .LIB）の場合は，その中のすべてのライブラリがターゲットライブラリに追加される

追加されるモジュールがすでに存在している場合，メッセージが表示され，新しいモジュールは追加されない

-	削除	指定したモジュールをライブラリから削除する。ライブラリにモジュールが存在しない場合はメッセージが表示される

削除操作にはモジュール名のみが必要。ドライブや拡張子を含む完全パス名を指定してもよいが，モジュール名以外はすべて無視される

*	抽出	指定したファイルに対応するモジュールをライブラリからコピーしてファイルを作成する。このモジュールが存在しない場合，メッセージが表示され，ファイルは作成されない。指定したファイルがすでに存在する場合は上書きされる

ライブラリ内のモジュールの名前を直接は変更できない。モジュール名を変更するには，該当するモジュールの抽出および削除を行い，この抽出して作成したファイルの名前を変更し，これをライブラリに再び追加する

-*	抽出および	指定したモジュールを対応するファイルにコピーして，

*-	削除	これをライブラリから削除する

-+	置換	指定したモジュールを対応するファイルで置き換える


TLIB の例

TLIB のさまざまな使い方を示す簡単な実例を以下に示します。

例 1

X.OBJ，Y.OBJ，Z.OBJ の 3 つのモジュールでライブラリ MYLIB.LIB を作成するには，次のように入力します。

tlib mylib +x +y +z

例 2

ライブラリ MYLIB.LIB を作成し，そのリストも MYLIB.LST に出力するには，次のように入力します。

tlib mylib +x +y +z, mylib.lst

例 3

既存のライブラリ CS.LIB の CS.LST にリストを出力するには，次のように入力します。

tlib cs, cs.lst

例 4

MYLIB.LIB から，モジュール X.OBJ を新しいものと置き換え，A.OBJ を追加し，Z.OBJ を削除するには，次のように入力します。

tlib mylib -+x +a -z

例 5

MYLIB.LIB からモジュール Y.OBJ を抽出し，MYLIB.LST にそのリストを出力するには，次のように入力します。

tlib mylib *y, mylib.lst

例 6

レスポンスファイルを使ってモジュール A.OBJ，B.OBJ...G.OBJ で新しいライブラリ (ALPHA) を作成する手順は次のとおりです。

1.	まず，以下の内容を記述したテキストファイル ALPHA.RSP を作成します。

+a.obj +b.obj +c.obj &

      +d.obj +e.obj +f.obj &

      +g.obj

2.	次に，以下に示す TLIB コマンドを使います。リストファイル ALPHA.LST が作成されます。

tlib alpha @alpha.rsp, alpha.lst


IMPLIB

IMPLIB はインポートライブラリを作成し，IMPDEF はモジュール定義ファイル（.DEF ファイル）を作成します。インポートライブラリとモジュール定義ファイルは，ダイナミックリンクライブラリ (DLL) からインポートする関数の情報をリンカに与えます。


TLIB

Turbo C++ にはコマンドラインツールは含まれていません。

TLIB は個々の .OBJ（オブジェクトモジュール）ファイルのライブラリを管理するユーティリティです。ライブラリは，オブジェクトモジュールの集合を 1 つの単位として扱う便利なツールです。


インポートライブラリ

インポートライブラリにはレコードがあります。各レコードには DLL の名前が記述され，インポートされる関数が存在する DLL 内の場所が指定されています。このレコードは TLINK または IDE リンカによってアプリケーションに結合され，DLL 関数呼び出しの解決に必要な情報を Windows に提供します。インポートライブラリは，モジュール定義ファイルの IMPORTS セクションの一部またはすべてで置き換えることができます。


IMPDEF

IMPDEF は入力として DLL 名を取り込み，出力として DLL がエクスポートする関数名の記述されたエクスポートセクションを含むモジュール定義ファイルを作成します。


MAKE について

関連項目

MAKE.EXE はコマンドラインのプロジェクトマネージャユーティリティであり，プロジェクトのコンパイルとリンクのサイクルを管理します。MAKE は，元々コンパイルとリンクに結び付けられているわけではなく，ファイルの依存関係に基づいてコマンドを実行する汎用のツールです。MAKE では，最後のコンパイル以降に変更したファイルのみをコンパイルすることにより，プロジェクトをすばやく作成できるようにします。さらに，作成時の特殊な状況に対する MAKE による対処方法を指定するルールを設定することもできます。

MAKE の基礎

MAKE はそのデフォルト設定を使って作成したルールを用いて，プロジェクトでファイルをコンパイルする方法を決定します。たとえば，デバッグ情報でプロジェクトを作成して .OBJ ファイルをコンパイルする時期を指定できるのは，ソースファイルのタイムスタンプが .OBJ ファイル自体のものよりも新しい場合にかぎられます。モジュールを強制的にコンパイルするには，TOUCH.EXE を使ってモジュールの従属ファイルの 1 つのタイムスタンプを変更します。

テキスト形式のメイクファイルで 2 種類のルール（明示的ルールと暗黙のルール）を作成して，MAKE にプロジェクトでのファイルの扱い方を指示します。MAKE は設定されたルールを用いて，ファイル（セット）にコマンドを実行すべきかどうかを決めます。コマンドは，通常はファイルセットのコンパイルやリンクを MAKE に対して指示するものですが，オペレーティングシステムのほとんどすべてのコマンドを指定できます。

MAKE の一般的な構文は次のとおりです。

MAKE [<オプション> ...] [<ターゲット> [<ターゲット> ...]]

<オプション>
MAKE の動作を制御する MAKE オプションである

<ターゲット>
メイクファイルに記述されたターゲットの名前。これを作成対象にする

MAKE コマンド，オプション引数，ターゲット引数はそれぞれスペースで区切らなければなりません。ターゲットの指定で複数のファイルを指示する際には，* や ? のようなワイルドカード文字を使うことが可能です。たとえば，MAKE のコマンドラインヘルプを表示するには，MAKE -? と入力します。


デフォルト MAKE アクション
MAKE のデフォルトの動作

MAKE コマンドを実行すると，MAKE はデフォルトのルールが記述されている BUILTINS.MAK というファイルを探します（デフォルトルールを無効にするには，-r オプションを指定します）。MAKE はこのファイルを，最初にカレントディレクトリで探し，次に MAKE.EXE が格納されているディレクトリで探します。BUILTINS.MAK をロードした後，MAKE はカレントディレクトリで MAKEFILE または MAKEFILE.MAK というファイルを探します（MAKEFILE 以外のファイルを指定するには，-f オプションを使用します）。どのファイルも見つからない場合にはエラーメッセージが表示されます。

メイクファイルをロードすると，MAKE は最初のターゲットの従属ファイルのタイムスタンプを調べて，メイクファイルの最初に記述されたターゲットだけを作成しようとします。従属ファイルの方がターゲットファイルよりも新しい場合，MAKE はコマンドを実行してターゲットを更新します。

最初のターゲットの従属ファイルの 1 つがメイクファイルの別の箇所でターゲットとして使用されている場合，MAKE はそのターゲットの依存関係を調べてそれを作成してから最初のターゲットを作成します。この連鎖反応を，結合された依存関係といいます。

作成処理で何かが失敗すると，MAKE は作成中のターゲットファイルを削除します。作成が失敗した場合に MAKE にターゲットを削除させないようにするには，.precious 指令を使います。

MAKE コマンドの発行後に MAKE を停止させるには，〔Ctrl〕+〔Break〕または〔Ctrl〕+〔C〕を押します。


BUILTINS.MAK

BUILTINS.MAK ファイルには，MAKE がメイクファイルのターゲットを作成するときに使う標準的なルールやマクロが記述されます。MAKE に BUILTINS.MAK を無視させるには，-r MAKE オプションを使います。

BUILTINS.MAK のデフォルトテキストを次に示します。

#

# Borland C++ - (C) Copyright 1993 by Borland International

#

# default is to target 16BIT

# pass -DWIN32 to make to target 32BIT

!if !$d(WIN32)

CC        = bcc

RC        = brcc

AS        = tasm

!else

CC        = bcc32

RC        = brcc32

AS        = tasm32

!endif

.asm.obj:

    $(AS) $(AFLAGS) $&.asm

.c.exe:

    $(CC) $(CFLAGS) $&.c

.c.obj:

    $(CC) $(CFLAGS) /c $&.c

.cpp.exe:

    $(CC) $(CFLAGS) $&.cpp

.cpp.obj:

    $(CC) $(CPPFLAGS) /c $&.cpp

.rc.res:

    $(RC) $(RFLAGS) /r $&

.SUFFIXES: .exe .obj .asm .c .res .rc

!if !$d(BCEXAMPLEDIR)

BCEXAMPLEDIR = $(MAKEDIR)\..\EXAMPLES

!endif


メイクファイルの使い方

メイクファイルは，MAKE が特定のプロジェクトを作成するのに使用する命令一式が記述されたテキストファイルです。MAKE はメイクファイルを MAKEFILE または MAKEFILE.MAK というファイルであるとみなしますが，-f オプションを使えばそれ以外のメイクファイル名を指定できます。

MAKE は，MAKE コマンドで指定した（1 つまたは複数の）ターゲットを作成するか，メイクファイル内で最初に検出したターゲットを作成します。複数のターゲットを作成するには，メイクファイルでシンボリックターゲットを使います。

メイクファイルの構成要素は以下のとおりです。

コメント（前にシャープ記号 (#) を指定する）

明示的ルールと暗黙のルール

マクロ

指令


シンボリックターゲット

シンボリックターゲットを使うと，MAKE にメイクファイルの複数のターゲットを作成させることができます。シンボリックターゲットを指定すると，作成するすべてのターゲットを依存関係行に記述できます。シンボリックターゲットは基本的に，結合された依存関係を使用して複数のターゲットを作成します。

たとえば，次のメイクファイルは，シンボリックターゲット AllFiles を使用して FILE1.EXE と FILE2.EXE の両方を作成します。

AllFiles: file1.exe file2.exe    #この AllFiles にはコマンドがないことに注意

file1.exe: file1.obj

    bcc32 file1.obj

file2.exe: file2.obj

    bcc32 file2.obj

シンボリックターゲットの規則

シンボリックターゲットを使う際には以下の規則に従います。

シンボリックターゲットの行にコマンドラインは入力できない

シンボリックターゲットにはユニークな名前を指定する。カレントディレクトリにあるファイル名を指定してはいけない

シンボリックターゲットの名前はオペレーティングシステムのファイル命名規則に基づいて指定する


MAKE オプション

コマンドラインオプションを使用して，MAKE の動作を制御できます。MAKE オプションでは，大文字と小文字が区別され，オプションの前にはハイフン (-) またはスラッシュ (/) を指定します。

MAKE の一般的な構文は次のとおりです。

MAKE [<オプション> ...] [<ターゲット> [<ターゲット> ...]]

<オプション>
MAKE の動作を制御する MAKE オプションである

<ターゲット>
メイクファイルに記述されたターゲットの名前。これを作成対象にする

MAKE コマンド，オプション引数，ターゲット引数はそれぞれスペースで区切らなければなりません。ターゲットの指定で複数のファイルを指示する際には，* や ? のようなワイルドカード文字を使うことが可能です。たとえば，MAKE のコマンドラインヘルプを表示するには，MAKE -? と入力します。

たとえば，PROJECTA.MAK というファイルをメイクファイルとして使うには次のコマンドをと入力します。

MAKE -fPROJECTA.MAK

多くのコマンドラインオプションには，メイクファイルで使用できる同等の指令があります。

:	デフォルト MAKE オプションを設定するには，-W オプションを使います。

オプション	解説

-a	.OBJ ファイルに関連するインクルードファイルやネストしたインクルードファイルの依存関係を調べ，.h ファイルが変更されていれば .OBJ ファイルを更新する。-c を参照

-B	ファイルのタイムスタンプにかかわらずすべてのターゲットを作成する

-c	自動依存関係情報をキャッシュし，MAKE の処理速度を向上させる。-a とともに使用する。MAKE がインクルードファイルを変更する場合は使用不可（メイクファイルで TOUCH を使う場合や，MAKE の処理中にヘッダーファイルやインクルードファイルを作成するような場合）

-Dマクロ	1 文字でマクロを定義する。これを行うとメイクファイルに記述された式 !ifdef マクロは真を返す

[-D]マクロ=[文字列]	文字列でマクロを定義する。文字列にスペースやタブを含める場合は文字列を引用符で囲む。-D は省略可能

-dディレクトリ	MAKER（MAKE のリアルモードバージョン）がスワップアウトするときに使用するドライブとディレクトリを指定する。このオプションは -S とともに用いなければならない。このオプションは MAKE で用いる場合には無効

-e	環境変数と同じ名前を持つマクロを無視する（MAKE はマクロのかわりに環境変数を使用）

-fファイル名	MAKEFILE のかわりにファイル名またはファイル名 .MAK を使う（-f の後ろのスペースは省略可能）

-h または -?	MAKE オプションを表示する。デフォルト設定は，最後に「+」記号を付けて表示される

-Iディレクトリ	インクルードファイルを，まずカレントディレクトリで，次にこのオプションで指定されたディレクトリで探す

-i	メイクファイルから実行されるすべてのプログラムの終了ステータスを無視して作成処理を続行する

-K	MAKE が作成したテンポラリファイルを保存する（MAKE は通常テンポラリファイルを削除する）

-m	MAKE がファイルを処理するごとにそのタイムスタンプを表示する

-N	マイクロソフトの NMAKE のように MAKE を実行する

-n	MAKE のコマンドの表示だけ行い，実行はしない。メイクファイルのデバッグに便利

-p	メイクファイルの実行前にマクロ定義と暗黙のルールをすべて表示する

-q	ターゲットが更新されているならば 0 を返し，それ以外の場合は 0 以外の値を返す（バッチファイルで使用）

-r	BUILTINS.MAK で定義されているすべてのルールを無視する

-S	コマンドの実行中に MAKER をメモリからスワップアウトし，メモリのオーバーヘッドを減らして大きなモジュールのコンパイルを可能にする。このオプションは MAKE では無効

-s	コマンドの画面表示を抑制する

-Uマクロ	マクロ定義を未定義にする

-W	指定されている文字列オプション以外のオプションを MAKE.EXE に書き込み，これをデフォルトとする（リアルモード版 MAKER.EXE のみ）


デフォルト MAKE オプションの設定

-W オプションを使うと，MAKE のデフォルトオプションを設定できます。デフォルトオプションを設定するには，次の構文を指定します。

make  [-オプション[-] ...] -W

たとえば，MAKE -m -W のように入力すると，デフォルトで -m オプションがオンになります。これで，MAKE はファイルのタイムスタンプを必ず表示させます。-W オプションを使うと，MAKE により MAKER.EXE への変更の書き込みを求めるメッセージが表示されます。Y と入力すると，新しいデフォルトを受け付けます。デフォルトでオンになっているオプションをオフにするには，オプションの後ろにハイフンを指定します。たとえば，-m オプションの変更を元に戻すには，次のように入力します。

MAKE -m- -W

-W オプションは，以下の MAKE オプションと一緒には使用できません。

-Dマクロ -dディレクトリ -fファイル名 -Iディレクトリ	-Dマクロ=文字列 -Uシンボル -? または -h
注意:	-DOS の SHARE プログラムがロードされているときに W オプションを使おうとすると，MAKE によりメッセージ「Fatal: unable to open file MAKER.EXE」が表示されます。


テンポラリレスポンスファイルの使い方

MAKE では，コマンドラインが長くなって 1 行に収まりきれない場合には，テンポラリレスポンスファイルを作成できます。

レスポンスファイルへの書き込みを始めるには，メイクファイルに MAKE の演算子 && を指定し，その後ろに希望するデリミタ（| が適当）を入力します。ファイルへの書き込みを終了するには，そのデリミタをもう一度入力します。

次の例では，TLINK32 への入力用のファイルを作成するように MAKE に命令する &&| を示しています。

prog.exe: A.obj B.obj

    TLINK32 /c @&&|    # &&| がテンポラリファイルを開く。@ は TLINK32 用のファイル

    c0s.obj $**

    prog.exe

    prog.map

    maths.lib cs.lib

|              # | がテンポラリファイルを閉じる。これは行頭に指定されなければならない

&&| で作成されたレスポンスファイルには，以下の命令が指定されます。

c0s.obj a.obj b.obj

prog.exe

prog.map

maths.lib cs.lib

MAKE は，MAKE0000.@@@ で始まるテンポラリファイルを指定しています。ただし，0000 はテンポラリファイルが作成されるごとに 1 ずつ大きくなる数値です。MAKE はその後，テンポラリファイルが終了した時点で削除します。


TOUCH の使い方

TOUCH.EXE は，システムの現在の日時を反映するようにファイルのタイムスタンプを更新します。

ソースファイルを変更していない場合でも，ターゲットファイルを再コンパイルや再構築する必要がある場合があります。これに対処する方法の 1 つとして，TOUCH ユーティリティが用意されています。これにより，ターゲットの 1 つまたは複数の従属ファイルのタイムスタンプを更新できます。（1 つまたは複数の）ファイルを TOUCH 処理するには，コマンドラインに次のように入力します。

touch [options] filename [filename...]

TOUCH は 32 ビットの実行形式ファイルであり，長いファイル名を受け付けます。また，* および ? のワイルドカード文字を含むファイル名を使用して，複数のファイルを同時に「TOUCH」処理できます。

注意:	TOUCH を使う際には，システムの内蔵クロックが正しく設定されていることを確認します。

TOUCH オプション

TOUCHE.EXE でサポートされるコマンドラインオプションは以下のとおりです。

オプション	説明

-d月-日-年	ファイルの日付を指定した日付に設定する

-fファイル名	ファイルのタイムスタンプを設定して「ファイル名」のものにあわせる

-h	ヘルプ情報を表示する（オプションまたはファイル名なしで TOUCH を入力する場合と同じ）

-t時:分:秒	ファイルの時間を指定した時間に設定する

-v	TOUCH を実行した各ファイルを詳細に表示する


マイクロソフトの NMAKE との互換性

マイクロソフトの NMAKE 用に作成されたメイクファイルを使用するには，-N オプションを使います。-N オプションを使う場合の相違点は以下のとおりです。

$d マクロの扱いが異なる。かわりに !ifdef または !ifndef を使用する

パスを返すマクロでは最後の \ を返さない。たとえば，$(<D) では通常 C:\CPP\ が返されるが，-N オプションを使うと C:\CPP が返される

一致する .suffixes 指令がないかぎり，MAKE はメイクファイルの終わりから先頭に向かってルールの検索を始める

暗黙のルールでは，MAKE は $* マクロを従属ファイル名ではなくターゲット名に展開する

MAKE は << 演算子を && 演算子のように解釈しテンポラリファイルを作成します。このテンポラリファイルはレスポンスファイルとして使われ，その後削除されます。ファイルを保存するには，-KMAKE コマンドラインオプションを使うか，またはメイクファイル内で KEEP を使います。

<<FileName.Ext

    テキスト

    ...

    <<KEEP

テンポラリファイルを保存しない場合は，NOKEEP と入力するか，テンポラリファイル名だけを入力します。ファイル名を入力しないと MAKE がその名前を付けます。NOKEEP を用いると，-K コマンドラインオプションがオーバーライドされます。


明示的ルールと暗黙のルール

メイクファイルのターゲットの作成方法について MAKE に対して命令を与える明示的ルールと暗黙のルールは，一般に以下のように定義されます。

明示的ルールは，特定のファイルに対する命令である

暗黙のルールは，明示的ルールがないファイルに対する一般的な命令である

ルールの一般形式は次のとおりです。

依存関係行

    コマンド行

依存関係行では明示的ルールと暗黙のルールで異なる構文が使用されますが，コマンドライン構文はどちらのルールでも同じです。

MAKE は 1 つのターゲットに対して複数の依存関係行をサポートし，1 つのターゲットに複数のコマンドラインを指定できます。ただし，関連するコマンドラインは 1 つの依存関係行にしか指定できません。たとえば，次のようになります。

Target1: dependent1 dep2 dep3 dep4 dep5

Target1: dep6 dep7 dep8

    bcc32 -c $**


明示的ルールの構文

明示的ルールは，MAKE が特定のターゲットを作成する時点で従わなければならない命令を指定します。明示的ルールでは，1 つまたは 2 つのコロンの後ろに 1 つまたは複数のターゲットを指定します。1 つのコロンは，（1 つまたは複数の）ターゲットに対して 1 つのルールが記述されることを示します。2 つのコロンは，（1 つまたは複数の）ターゲットに対して 2 つ以上のルールが記述されることを示します。

明示的ルールの構文は次のとおりです。

target [<ターゲット> ...]:[:][{パス}] [<従属ファイル> ...]

 [<コマンド>]

<ターゲット>
ファイルの名前と拡張子を指定する（ターゲットはメイクファイルの行の先頭にスペースやタブを置かずに指定）。複数のターゲットを指定するには，それぞれのターゲット名をスペースまたはタブで区切る。また，明示的ルールのターゲットの位置に繰り返し同じターゲット名を使用してはいけない

{パス}
MAKE に従属ファイルを見つけるための検索先を指示するディレクトリのリスト。複数のディレクトリは，それぞれをセミコロンで区切り，パス指定の全体を中カッコで囲む

<従属ファイル>
（1 つまたは複数の）ファイルで，MAKE がそのタイムスタンプをチェックしてターゲットより新しいかどうかを調べる。従属ファイルの前には必ずスペースを置く。従属ファイルがメイクファイル内の別の箇所でターゲットとして記述されている場合，MAKE はそのターゲットを更新または作成してから，元のターゲットで従属ファイルを使用する（これは，「結合された依存関係」という）

<コマンド>
オペレーティングシステムの（1 つまたは複数の）任意のコマンドである。コマンドラインは少なくとも 1 つのスペースまたはタブで字下げ処理しなければならない。字下げ処理を行わないと，ターゲットとして解釈されてしまう。複数のコマンドを指定するには，それぞれをスペースで区切る

依存関係行またはコマンドラインが次の行に続くときは，次のように行末に円記号 (\) を指定します。

MYSOURCE.EXE: FILE1.OBJ\	#従属関係行

    FILE3.OBJ	#従属関係行の続き

    bcc32 file1.obj file3.obj	#コマンドライン

複数のルールを持つ 1 つのターゲット

1 つのターゲットに複数の明示的ルールを指定できます。複数の明示的ルールを指定するには，ターゲット名の後ろに 2 つのコロン :: を付けます。ターゲットに複数のルールとコマンドを指定する方法の例を次に示します。

.cpp.obj:

    bcc32 -c -ncobj $<

.asm.obj:

    tasm  /mx $<, asmobj\

mylib.lib :: f1.obj f2.obj   #複数のルールは 2 つのコロンで指定する

    echo Adding C files

    tlib mylib -+cobjf1 -+cobjf2

mylib.lib :: f3.obj f4.obj

    echo Adding ASM files

    tlib mylib -+asmobjf3 -+asmobjf4


暗黙のルールの構文

暗黙のルールは，特定のファイル拡張子で終了するファイルを MAKE により作成する方法についての一般的なルールを指定します。暗黙のルールはパスまたはピリオドで始まります。主な構成要素はピリオドで区切ったファイル拡張子です。最初の拡張子は従属ファイルのもので，2 番目の拡張子はターゲットファイルのものです。

暗黙の従属ファイルがターゲットより古くなっているか，または存在していない場合，MAKE はこのルールに関連したコマンドを実行します。MAKE は暗黙の従属ファイルよりも前に明示的な従属ファイルを更新します。

暗黙のルールの基本的な構文は次のとおりです。

[{source_dir}].source_ext [{target_dir}].target_ext:

    [commands]

source_dir
従属ファイルが格納されている（1 つまたは複数の）ディレクトリを指定する。複数のディレクトリを指定する場合はセミコロンで区切る

.source_ext
従属ファイル名の拡張子を指定する

target_dir
MAKE がターゲットファイルを格納するディレクトリを指定する。暗黙のルールは，このディレクトリにあるターゲットに対してのみ適用される。target_dir を指定しない場合，どのディレクトリのターゲットにも暗黙のルールが適用される

.target_ext
ターゲットファイル名の拡張子を指定する。マクロを使用できる

: (コロン)
従属関係行の終わりを示す

commands
オペレーティングシステムの（1 つまたは複数の）コマンド。コマンドラインは 1 つのスペースかタブで字下げする。この字下げを行わないと，ターゲットとして解釈されてしまう

2 つの暗黙のルールが 1 つのターゲット拡張子に一致するけれども従属ファイルが存在しない場合，MAKE は従属ファイルの拡張子が .SUFFIXES リストで先に記述されている暗黙のルールから使用します。

暗黙のコマンドを使用する明示的ルール

明示的ルールのターゲットはコマンド行を暗黙のルールから取得できます。暗黙のルールの例と，コマンド行のない明示的ルールの例を次に示します。

.c.obj:

    bcc32 -c $<  #このコマンドが使用するマクロ $< については
                   #「デフォルトの MAKE マクロ」を参照

myprog.obj:	#この明示的ルールはコマンド bcc -c myprog.c を使用する

暗黙のルールのコマンドは MYPROG.C をコンパイルするよう MAKE に指示します。マクロ $< は名前 myprog.obj を myprog.c で置き換えます。


コマンドの構文

コマンドは明示的ルールまたは暗黙のルールの直後に指定できますが，改行後にスペースまたはタブを指定してから開始しなければなりません。

コマンドにはオペレーティングシステムの任意のコマンドを記述できますが，さらに，オペレーティングシステムが認識できない MAKE マクロ，指令，特殊演算子も記述できます。ただし，｜は使えません。以下にコマンドの例を示します。

cd..

bcc -c mysource.c

COPY *.OBJ C:\PROJECTA

bcc32 -c $(SOURCE)   #マクロについては，「MAKE マクロの使い方」を参照

コマンドの一般的な構文は次のとおりです。

[プレフィクス...] コマンド

コマンドプレフィクス

暗黙のルールと明示的ルールの両方のコマンドについて，MAKE がコマンドを処理する方法を修飾するプレフィクスを指定できます。次の表にメイクファイルで使用できるプレフィクスの一覧を示します。

プレフィクス	解説

@	コマンドの実行時にコマンドを表示しない

-数値	コマンドから返された終了コードが整数値を超える場合，メイクファイルのコマンドの処理を停止する。通常は，終了コードがゼロ以外であれば MAKE は異常終了する。- と数値の間にホワイトスペースを入れてはならない

-	コマンドが返す終了コードにかかわらず，メイクファイルのコマンドの処理を続行する

&	すべての従属ファイルを表すマクロ $**，またはターゲットより新しいタイムスタンプを持つすべての従属ファイルを表すマクロ $? を展開する。展開されたマクロの従属ファイルごとにコマンドを 1 回実行する

!	& プレフィクスと同様に機能する

@ の使い方

次に示すコマンドは @ プレフィクスを使って，MAKE がコマンドを実行するときにコマンドが画面に表示されないようにします。

diff.exe : diff.obj

    @bcc32 diff.obj

- 数値と - の使い方

- 数値プレフィクスと - プレフィクスは，エラーが発生したときのメイクファイルの処理を制御します。エラーが発生した場合に，MAKE 処理を続行するかどうかを選択できます。あるいは，容認できるエラー数を指定して，その間については MAKE 処理を続行することもできます。

次の例では，BCC がエラーを返しても，MAKE は処理を続行します。

target.exe : target.obj

target.obj : target.cpp

    bcc32 -c target.cpp

& の使い方

& プレフィクスは従属ファイルごとに 1 回コマンドを発行します。パラメータとしてファイルのリストを指定できないコマンドでは特に便利です。たとえば，次の記述では，

copyall : file1.cpp file2.cpp

    &copy $** c:\temp

次に示すように COPY が 2 回呼び出されます。

copy file1.cpp c:\temp

copy file2.cpp c:\temp

& プレフィクスを指定しない場合には，MAKE は COPY を 1 回しか呼び出しません。注意: & プレフィクスは，$** および $! マクロに対してしか機能しません。


MAKE コマンド演算子

MAKE のコマンド部ではオペレーティングシステムの任意のコマンドを使えますが，特殊な演算子も使うことができます。MAKE では，通常の演算子（+，- など）のほか，以下のような特殊な演算子がサポートされます。

演算子	解説

<	標準入力からではなく指定のファイルからの入力を使用する

>	コマンドからの出力をファイルに書き込む

>>	コマンドからの出力をファイルに追加する

<<	テンポラリのインラインファイルを作成し，この内容をコマンドへの標準入力として使う。また，-N が使用されている場合はテンポラリレスポンスファイルを作成する。注意: これは NMAKE でしか使用できない

&&	テンポラリレスポンスファイルを作成し，その名前をメイクファイルに挿入する

デリミタ	デリミタは，テンポラリレスポンスファイルで使う。デリミタとしては，# 以外の任意の文字を使用できる。<< および && については，テンポラリファイルの開始と終了のデリミタとして使う。開始のデリミタのある行でこの後ろにある文字はすべて無視される。終了のデリミタは 1 行内にこれだけを記述する


MAKE マクロの使い方

マクロは，Make がメイクファイルで検出するたびに任意の文字列に展開する変数です。たとえば，文字列 "mylib.lib" を表す LIBNAME というマクロを定義するには，メイクファイルの先頭に LIBNAME = mylib.lib という行を入力します。これで，MAKE はマクロ $(LIBNAME) を検出すると，文字列 mylib.lib で置き換えます。マクロを使うと，さまざまなプロジェクトに合わせて変更できるテンプレートのメイクファイルを作成できます。

メイクファイルでマクロを使用するには，$(MacroName) と入力します。ここで，MacroName は定義するマクロです。マクロ名を囲むのに中カッコ {} またはカッコ () を使用できます。

マクロは，メイクファイルのどこに記述されているかにより，以下に示すさまざまな時点で展開されます。

ネストしたマクロは，外側のマクロが呼び出されるときに展開される

ルール中のマクロと指令中のマクロは，MAKE がメイクファイルを最初に参照したときに展開される

コマンド中のマクロは，コマンドが実行されるときに展開される

メイクファイルに未定義のマクロがある場合，MAKE は同じ名前のオペレーティングシステム環境変数（通常は SET で定義）を探し，展開テキストとしてこの定義を使用します。たとえば，メイクファイルに $(PATH) と記述したけれども PATH が定義されていない場合，AUTOEXEC.BAT の PATH で定義したテキストが使用されます。環境変数の定義についての詳細は，オペレーティングシステムのマニュアルを参照してください。


MAKE マクロの定義

メイクファイルのマクロの定義の一般的な構文は，次のとおりです。

MacroName = expansion_text

MacroName では，大文字と小文字が区別される。つまり，MACRO1 と Macro1 は区別される

注意:	オペレーティングシステムによっては，環境変数に小文字を使用できる場合があります。この場合，環境変数とメイクファイルのマクロで大文字/小文字を合わせる必要があります。

MacroName は 512 文字以内とする

expansion_text は 4096 文字以内にし，英数字，句読点，ホワイトスペースで構成する

各マクロはメイクファイルの別の行に記述し，各マクロ定義は行頭から指定します。わかりすいように，マクロは通常メイクファイルの先頭に記述します。MacroName に対して複数の定義がある場合，古い定義は新しい定義によって上書きされます。

マクロはコマンドラインオプション -D を使っても定義できます。等号 (=) の前後にスペースは指定できません。ただし，スペースでそれぞれを区切れば複数のマクロを定義できます。コマンドラインで定義したマクロの例を次に示します。

make -Dsourcedir=c:\projecta

make -Dcommand="bcc32 -c"

make -Dcommand=bcc32 option=-c

メイクファイルで定義されたマクロは，コマンドラインで定義されたマクロを上書きする


MAKE マクロ内の文字列置換

MAKE では，あらかじめ定義したマクロ内の文字を一時的に置換できます。たとえば，マクロを SOURCE = f1.cpp f2.cpp f3.cpp で定義して，$(SOURCE:.cpp=.obj) と指定すると，文字列 .obj で文字列 .cpp を置換できます。置換ではマクロを再定義しません。

マクロ置換の規則は以下のとおりです。

構文： $(MacroName:original_text=new_text)

コロンの前後のホワイトスペースは不可

original_text 内の文字列はマクロ定義内の文字列と一致させる（この文字列では，大文字と小文字が区別される）

このようにすれば置換マクロ内でマクロが使えます。たとえば，次のとおりです。

MYEXT=.C

SOURCE=f1.cpp f2.cpp f3.cpp

$(SOURCE:.cpp=$(MYEXT))         #f1.cpp を f1.C に変更する, など


デフォルトの MAKE マクロ

MAKE には，メイクファイルで使えるデフォルトのマクロがあります。次の表に，マクロ定義と，明示的ルールおよび暗黙のルールで展開されたマクロの一覧を示します。

マクロ	暗黙の展開	明示的展開

$*	パス\従属ファイル名	パス\ターゲットファイル名

$<	パス\従属ファイル名	パス\ターゲットファイル名

+拡張子	+拡張子

$:	従属ファイルのパス	ターゲットファイルのパス

$.	従属ファイル名+拡張子	ターゲットファイル名+拡張子

$&	従属ファイル名	ターゲットファイル名

$@	パス\ターゲットファイル名	パス\ターゲットファイル名

+拡張子	+拡張子

$**	パス\従属ファイル名	すべての従属ファイル+拡張子

+拡張子

$?	パス\従属ファイル名	古い従属ファイル

+拡張子

マクロ	展開	コメント

__MSDOS__	1	MAKER.EXE の場合

__MAKE__	0x0400	MAKE のバージョン番号の 16 進表記

MAKE	MAKE	MAKE の実行形式ファイル名

MAKEFLAGS	オプション	コマンドラインで入力したオプション

MAKEDIR	ディレクトリ	MAKE.EXE があるディレクトリ


デフォルトの MAKE マクロの修飾

デフォルトのマクロでは必要な文字列が得られない場合，マクロ修飾子を使用すれば目的に合った文字列部分を取り出せます。マクロ修飾子は通常 $< または $@ で使用します。

デフォルトのマクロを修飾するには次の構文を使用します。

$(MacroName [modifier])

次の表はマクロ修飾子とその使用例の一覧を示します（ターゲットが C:\PROJECTA\MYSOURCE.C の場合）。

修飾子	展開されるファイル名部分	例	結果

D	ドライブ名とディレクトリ名	$(<D)	C:\PROJECTA\

F	ベース名と拡張子	$(<F)	MYSOURCE.C

B	ベース名のみ	$(<B)	MYSOURCE

R	ドライブ名，ディレクトリ名，ベース名	$(<R)	C:\PROJA\MYSOURCE


MAKE 指令の使い方

MAKE 指令は C や Pascal などの言語の指令に類似しており，MAKE においてコマンドの実行前にコマンドを画面表示するなどのさまざまな制御機能を実行します。MAKE 指令は，感嘆符またはピリオドのどちらかで始まり，コマンドラインオプションをオーバーライドします。次の表に MAKE 指令および対応するコマンドラインオプションの一覧を示します。

指令	オプション	解説

.autodepend	-a	自動依存チェックを有効にする

.cacheautodepend	-c	自動依存キャッシュを有効にする

!cmdswitches	文字列オプション以外のオプション文字に続けて + または - を指定し，そのオプションをオンまたはオフにする。+ または - の符号の前にスペースまたはタブを入れなければならない。符号とオプション文字の間にはスペースやタブを入れてはならない

!elif	C の else if と同様に動作する

!else	C の else と同様に動作する

!endif	!if 文，!ifdef 文，!ifndef 文を終了する

!error	MAKE を停止し，エラーメッセージを表示する

!if	条件文を開始する

!ifdef	C の #ifdef と同様に動作し，指定されたマクロが定義されているかを調べる

!ifndef	C の #ifndef と同様に動作し，指定されたマクロが未定義かを調べる

.ignore	-i	MAKE はコマンドの戻り値を無視する

!include	C の #include と同様に動作し，メイクファイルでインクルードするファイルを指定する

!message	MAKE がメイクファイルを実行しているときに標準出力にメッセージを表示させる

.keep	-K	MAKE が作成するテンポラリファイルを保持する（通常は MAKE はテンポラリファイルを削除する）

.noautodepend	-a-	自動依存チェックを無効にする

.nocacheautodepend	-c-	自動依存キャッシュを無効にする

.noIgnore	-i-	.Ignore を無効にする

.nokeep	-K-	MAKE が作成するテンポラリファイルを保持しない

.nosilent	-s-	MAKE がコマンドを実行する前にコマンドを表示する

.noswap	-S-	コマンドを実行する前に MAKE 自身をスワップアウトしないように指示する

.path.ext	path ディレクトリで拡張子 .ext が付いたファイルを探すように MAKE に指示する

.precious	作成が失敗しても 1 つまたは複数のターゲットを保存する

.silent	-s	MAKE がコマンドを表示しないで実行する

.suffixes	あいまいな依存関係のための暗黙のルールを決める

.swap	-S	コマンドを実行する前に MAKE 自身をスワップアウトするよう指示する

!undef	マクロの定義を消去する。その後マクロが未定義になる


.autodepend

自動依存ファイルとは，作成するターゲットに自動的にインクルードされるファイル（C++ ソースコードにインクルードされるヘッダーファイルなど）です。.autodepend を有効にすると，MAKE は .OBJ を作成するのに使用するすべてのファイル（自動依存ファイルも含む）のタイムスタンプを比較します。.OBJ を作成するのに使用するファイルのタイムスタンプが .OBJ ファイルのタイムスタンプより新しい場合，.OBJ ファイルは再コンパイルされます。.autodepend（つまり -a）は，結合された依存関係を形成するかわりに使えます。


!error

!error 指令の構文は次のとおりです。

!error メッセージ

MAKE はこの指令を見つけると処理を停止し，次のメッセージを表示します。

Fatal makefile exit code: Error directive: メッセージ

次の例で示すように，条件文に !error を挿入し，処理を異常終了させてエラーメッセージを表示します。

!if !$d(MYMACRO)

#MYMACRO が定義されていなければ

!error MYMACRO が定義されていない

!endif

MYMACRO が定義されていない場合は，MAKE は終了して次のメッセージを表示します。

Fatal makefile 4: Error directive: MYMACRO が定義されていない

エラーチェック制御

エラーチェックの制御方法は，MAKE により以下の 4 通りが提供されます。

.ignore 指令は，メイクファイル内の選択した部分についてエラーチェックを無効にする

-i コマンドラインオプションは，メイクファイル全体のエラーチェックを無効にする

- 数値プレフィクスはルールの一部として入力するものだが，これは終了コードが指定の数値を超える場合に関連コマンドのエラーチェックを無効にする

- プレフィクスは，終了コードにかかわらず関連コマンドのエラーチェックを無効にする


!if とその他の条件指令

!if 指令は，C の if 文のように機能します。次に示すように，!if およびその他の条件指令の構文はコンパイラの条件と類似しています。

!if 条件	!if 条件	!if 条件	!ifdef マクロ
!endif	!else	!elif 条件	!endif
	!endif	!endif
以下の式は等価です。

!ifdef マクロと !if $d(マクロ)

ifndef マクロと !if !$d(マクロ)

条件指令に適用される規則は以下のとおりです。

!if，!ifdef，および !ifndef の指令と !endif 指令との間には，1 つの !else 指令を記述できる

!if，!ifdef，!ifndef の指令と !else 指令と !endif との間には，複数の !elif 指令を記述できる

ルールを複数の条件指令にわたって分けるのは不可

条件指令はネストできる

!if，!ifdef，!ifndef には，対応する !endif 指令を必ず同じファイル内に記述する

!if 指令と !endif 指令の間に記述できる情報は以下のとおりです。

マクロ定義  明示的ルール  暗黙のルール	!include 指令  !error 指令  !undef 指令
if 文の条件は，10 進，8 進，16 進の定数および次の表に示す演算子で構成する条件式で表します。

演算子	解説	演算子	解説

-	符号反転	?:	条件式

~	ビット補数	!	論理的 NOT

+	加算	>>	右シフト

-	減算	<<	左シフト

*	乗算	&	ビットごとの AND

/	除算	|	ビットごとの OR

%	剰余	^	ビットごとの XOR

&&	論理的 AND	>=	より大きいか等しい*

||	論理的 OR	<=	より大きいか等しい*

>	より大きい	==	等しい*

<	より小さい	!= 	等しくない*

*演算子は文字列式でも機能します。

MAKE は条件式を 32 ビット符号付き整数として，または文字列として評価します。


!include

この指令は，C または C++ 言語の #include プリプロセッサ指令に似ています。これはメイクファイルに別のファイルのテキストを取り込みます。

!include ファイル名

ファイル名は二重引用符（""）または不等号カッコ（<>）で囲め，指令は無制限の深さにネストできますが，メイクファイルでは !include 指令を二重に記述するのは許可されません。この場合，エラーメッセージ「Cycle in the include files」が表示されます。

ルール，コマンド，指令は 1 つのソースファイルの中で完結させてください。!include ファイルでコマンドを開始し，メイクファイルでこれを終了させるような記述は行えません。

-I コマンドラインオプションで別のディレクトリを指定していない限り，MAKE はカレントディレクトリで !include ファイルを探します。


!message

!message 指令では，メイクファイルから画面にメッセージを送れます。メッセージを使うと，適切に動作しないメイクファイルをデバッグするのに便利です。たとえば，マクロ定義に問題がある場合，メイクファイルに次に示す行を挿入できます。

!message The macro is defined here as: $(MacroName)

MAKE がこの行を解釈すると，マクロが .CPP に展開される場合には画面上に「The macro is defined here as: .CPP」と表示されます。


.path.ext

.path.ext 指令は指定の拡張子を持つファイルを探す場所を MAKE に指示します。次に示す例では，C:\SOURCE または C:\CFILES で .c 拡張子を持つファイルを探し，C:\OBJS で .obj 拡張子を持つファイルを探すように指示します。

.path.c = C:\CSOURCE;C:\CFILES

.path.obj = C:\OBJS


.precious

MAKE での作成が失敗するとターゲットファイルは削除されます。.precious 指令はファイルを削除しないようにするので，ある種のターゲットには望ましいものです。たとえば，ライブラリにモジュールを追加する作成に失敗しても，ライブラリを削除したくない場合もあります。

.precious 指令の構文は次のとおりです。

.precious: target [target ...]


.suffixes

.suffixes 指令は，作成の暗黙のルールの順序を（ファイル拡張子で）MAKE に指示します。

.suffixes の構文は次のとおりです。

.suffixes: .ext [.ext ...]

ただし，.ext は暗黙のルールに記述する従属ファイル拡張子を表します。たとえば，.suffixes: .asm .c .cpp という行を記述すると，暗黙のルールは，メイクファイルに記述されている順序にかかわらず，.ASM ファイル，.C ファイル，.CPP ファイルという従属ファイル拡張子の順序で解釈されます。

次の .suffixes の例では，MAKE に対して，まず .ASM 拡張子のファイル，次に .C 拡張子のファイル，最後に .CPP 拡張子のファイルという順序でソースファイルを探すように指示しています。MYPROG.ASM が見つかれば TASM32 が呼び出され，このアセンブラファイルから MYPROG.OBJ が作成され，次に TLINK32 が呼び出されます。.ASM が見つからなければ，MAKE は MYPROG.C を探して .OBJ ファイルを作成するか，MYPROG.CPP を探します。

.suffixes: .asm .c .cpp

myprog.exe: myprog.obj

    tlink32 myprog.obj

.cpp.obj:

    bcc32 -P $<

.asm.obj:

   tasm32 /mx $<

.c.obj:

    bcc32 -P- $<


!undef

!undef 指令の構文は次のとおりです。

!undef マクロ名

!undef（定義解除）は，指定のマクロを消去します。これにより，!ifdef マクロ名のテストは偽となります。


指令内でのマクロの使い方

マクロ $d は !if 条件指令とともに用い，特定のマクロが定義されているかどうかの処理を行います。$d の後ろにはカッコまたは中カッコで囲んだマクロ名を記述します。この例を次に示します。

!if $d(DEBUG)	# DEBUG が定義されていれば

bcc32 -v f1.cpp f2.cpp 	# デバッグ情報付きでコンパイルし

!else	# それ以外の場合

bcc32 -v- f1.cpp f2.cpp 	# デバッグの情報と取り込まない

!endif


ヌルマクロ

未定義のマクロ名の場合，!ifdef マクロ名のテストは偽を返します。ヌルとして定義されたマクロ名の場合は真を返します。ヌルマクロを定義するには，マクロ定義における等号（=）の右側にスペースか改行文字を指定します。たとえば，次に示す行はメイクファイル内でヌルマクロを定義します。

NULLMACRO =

以下に示す行は，MAKE コマンドラインでヌルマクロを定義できます。

NULLMACRO=""

-DNULLMACRO


コマンドラインリソースツールの使い方（概要）
コマンドラインリソースツールの使い方

以下のコマンドラインリソースツールがあります。

リソースコンパイラ

BRCC32.EXE はボーランドのリソースコンパイラです。BRCC32.EXE はリソーススクリプトファイル（.RC ファイル）をコンパイルしてバイナリの .RES ファイルを作成します。

リソースリンカ

RLINK32.DLL は，.RES ファイル形式から .EXE ファイルにリソースを結合し，.EXE ファイルを Windows の実行形式としてマークするリソースリンカです。RLINK32.DLL は TLINK32.EXE を通して使用します。

リソースシェル

BRC32.EXE は，BRCC32 と RLINK32 は（TLINK32 を通して）1 つのステップ起動することができます。


リソースコンパイラ（BRCC32）

関連項目	例

BRCC32 は，リソースコンパイラのコマンドラインバージョンです。リソーススクリプトファイル（.RC）を入力として受け取り，リソースオブジェクトファイル（.RES）を出力として生成します。

構文

BRCC32 [options] <filename>.RC

コマンドラインオプション

BRCC32 のコマンドラインオプションは次のとおりです。

オプション	説明

@responsefile	指定されたコマンドファイルから指示を読み込む

-c <code page>	リソースの翻訳に指定されたコードページを使う。-C が指定されないと，デフォルトの ANSI コードページが使用される

-d<name>[=<string>]	プリプロセッサシンボルを定義する

-fo<filename>	出力される .RES ファイルの名前を指定する（デフォルトでは BRCC32 は入力の .RC ファイルと同名で拡張子を .RES にしたファイルを作成する）

-i<path>	1 つ以上のディレクトリをインクルード検索パスに追加する（複数指定する場合はセミコロンで区切る）

-m	-c スイッチで指定したコードページにダブルバイト文字セット（DBCS）の文字が含まれることを示す

-r	このスイッチは無視される。他のリソースコンパイラとの互換性のために用意されている

-v	処理経過メッセージを表示する

-x	現在のインクルードパスを削除する

-? or -h	ヘルプを表示する

-16	16 ビットリソースを作成する

-32	32 ビットリソースを作成する

BRCC32 は，WS_VISIBLE や BS_PUSHBUTTON などの Windows のコモンリソースに関する定数をあらかじめ定義します。また，RC_INVOKED と WORKSHOP_INVOKED というコンパイラに関する特殊シンボルも定義します。これらのシンボルは，ソーステキスト内のプリプロセッサの条件文でコンパイルを制御するために使用することができます。たとえば定数を次のように使うとコンパイルの速度を大幅に高めることができます。

#ifndef WORKSHOP_INVOKED

#include "windows.h"

#endif

下位互換性

次の構文は下位互換性のためにサポートされています。

構文

BRCC32 [options] <filename>.RC

コマンドラインオプション

BRCC32 は次のオプションを受け入れます。

オプション	説明

-31	Windows 3.1 互換の .RES ファイルを作成する

-w32	Win32 互換の .RES ファイルを作成する


リソースコンパイラの使用例

関連項目

次の例は，インクルードパスに 2 つのディレクトリを追加し，入力の .RC ファイルと同名の .RES ファイルを作成します。

brcc32 -i<dir1>;<dir2> <filename>.RC

次の例は，入力の .RC ファイルと異なる名前の .RES ファイルを作成します。

brcc32 -fo<filename>.RES <filename>.RC

次の例は，16 ビットの .RES ファイルを作成します。

brcc32 -16 -fo<filename>.RES <filename>.RC


リソースリンカ（RLINK32）

関連項目	例

RLINK32 は .RES ファイルを .EXE ファイルに結合して Windows の実行形式ファイルを作成します。RLINK は 1 対上のオブジェクトファイル（.RES）を入力として受け取り，1 つの Windows 実行形式ファイルを出力します。RLINK32 は，文字列テーブルとメッセージテーブルのフィックスアップを行うことでリソースをリンクしてから，リンクしたリソースを実行可能形式に結合します。RLINK32 は TLINK32 から 32 ビットリソースをリンクするために呼び出されます。

構文

rlink32 [options] <filename>.RES <filename>.EXE

コマンドラインオプション

RLINK32 は次のオプションを受け入れます。

オプション	説明

@<filename>	指定されたコマンドファイルから指示を読み込む

-d	.EXE ファイルからリソースを削除する（.RES ファイルが指定されない場合のデフォルト動作）

-fe<filename>	出力する .EXE ファイルの名前を指定する

-fi<filename>	追加の入力ファイルを指定する

-v	処理経過メッセージを表示する

-vx	リソースの列挙のみを行い，.EXE ファイルには結合しない

-? or -h	ヘルプを表示する

-Vd.d	指定された Windows バージョン用の .EXE ファイルを作成する（v3.1 がデフォルト）。指定できるバージョンオプションは次のとおり

オプション	ビット	結果

    3.1	 32	Windows 32s および WinNT 3.1 用。白の背景に 3 次元の外観

    4.0	 32	Windows 95 および WinNT 3.51 用。灰色で 3 次元の外観


リソースリンカの使用例

関連項目

次の例は，.RES ファイル内のリソースを .EXE ファイルに結合します。

rlink32 <filename>.RES <filename>.EXE

次の例は，2 つの .RES ファイルをリンクして .EXE ファイルに結合します。

rlink32 -fi<filename>.RES <filename>.RES <filename>.EXE

次の例は，入力 .EXE ファイル内のプログラムコードに入力 .RES ファイル内のリソースを結合して，新しい名前の出力 .EXE ファイルを作成します。

rlink32 -fe<filename>.EXE <filename>.RES <filename>.EXE

次の例は，.RLK コマンドファイルから指示を読み込み，3 つの .RES ファイルをリンクして .EXE ファイルに結合します。

rlink32 @<filename>.RLK

コマンドファイル（<filename>.RLK）の内容は次のとおりです。

-fi<filename>.RES

-fi<filename>.RES

<filename>.RES

<filename>.EXE


リソースシェル（BRC32）

関連項目	例

BRC32 はリソースコンパイラのシェルです。BRC32 は，コマンドラインの構文に従って BRCC32 と RLINK32 を起動します。

構文

brc32 [options] <filename>.RC [<filename>.EXE]

コマンドラインオプション

BRC32 は次のオプションを受け入れます。

オプション	説明

-d<name>=string	#IFDEF プリプロセッサ指令でテストできるシンボルを定義する

-fo<filename>	.RES ファイルの名前を変更する

-fe<filename>	.EXE ファイルの名前を変更する

-i<path>	インクルードパスに 1 以上のディレクトリを追加する（複数の場合はセミコロンで区切る）

-r	.RES ファイルだけを作成する。コンパイルされた .RES ファイルは .EXE には追加されない

-v	処理経過メッセージを表示する

-x	インクルードファイルまたはリソースファイルの検索時に INCLUDE 環境変数を無視するようコンパイラに指示する

-16	16 ビットの .RES ファイルを作成する

-32	32 ビットの .RES ファイルを作成する

-Vd.d	指定された Windows バージョン対応の .EXE ファイルを作成する（-v3.1 は 16 ビットリソースのデフォルト，-v4.0 は 32 ビットリソースのデフォルト）。バージョンオプションでは次の表の値を指定できる

オプション	ビット	結果

3.1	 16	白の背景に 3 次元の外観。Windows 3.1x，Windows 32s，および WinNT 3.1 用

4.0	 16	灰色で 3 次元の外観。Windows 95 および WinNT 3.51 用

3.1	 32	白の背景に 3 次元でない外観。Windows 32s および WinNT 3.1 用

4.0	 32	灰色で 3 次元の外観。Windows 95 および WinNT 3.51 用

次のオプションは，-r オプションが指定されたときに有効になります。

-k	.EXE 内のセグメントとリソースの連続するプレロードを無効にする。セグメントは，.DEFE ファイル内の順序が保持される（このオプションは 16 ビットリソースにのみ適用される）

-t	プロテクトモード（Windows のスタンダードおよび 386 エンハンストモード）だけで実行されるアプリケーションを作成する

下位互換性

次の構文とオプションは，下位互換性のために用意されています。

構文

brc [switches] <filename>.RC [<filename>.EXE]

コマンドラインオプション

BRC は次のオプションを受け入れます。

オプション	説明

-31	Windows 3.1 互換の .RES ファイルを作成する

-w32	Win32 互換の .RES を作成する


リソースシェルの使用例

関連項目

次のコマンドラインは，.RC ファイルをコンパイルして .RES ファイルを作成し，その .RES ファイルを実行形式ファイルに追加します。

brc32 <filename>.RC [<filename>.EXE]

BRC32 は，.RC ファイルと同名の .EXE ファイルを自動的に探します。.EXE ファイルの名前が .RC ファイルと異なる場合だけ，.EXE ファイルの名前を指定する必要があります。

次の例は，.RES ファイルを作成しますが .EXE ファイルに追加しません。コマンドラインに .EXE ファイルの名前を指定しても無視されます。

brc32 -r <filename>.RC

次の例は，既存の .RES ファイルを実行形式ファイルに追加します。.EXE ファイルの名前は，.RES ファイルの名前と異なるときにのみ必要です。

brc32 <filename>.RES [<filename>.EXE]

次の例では，BRC32 を使って Windows 3.1 互換の 16 ビットの .RES ファイルを作成します。

brc32 -16 -v3.1 -fo<filename>.RES <filename>.RC


TDUMP（ファイルダンプユーティリティ）

TDUMP.EXE は，ファイルをダンプしてその構造を表示します。

TDUMP はファイルを構造的に分解し，ファイルの拡張子を使って出力表示形式を決めます。.EXE，.OBJ，および .LIB ファイルなど，多くのファイル形式が認識されます。拡張子が認識されない場合は，16 進形式でファイルをダンプします。出力形式を制御するには，プログラムの起動時に TDUMP コマンドラインオプションを使います。

TDUMP にはファイルの内部構造を覗く機能があり，ファイルの内容だけでなくファイルがどのように構築されているかまで表示できます。さらに，ファイルの構造とその拡張子が適合するかどうかが照合されるので，TDUMP を使ってファイルの完全性をテストできます。

TDUMP 構文

TDUMP のコマンドライン構文は次のとおりです。

TDUMP [<options>] <Inputfile> [<Listfile>] [<options>]

<Inputfile>	構造を表示（またはダンプ）するファイル

<Listfile>	出力ファイル名（省略可能）。標準の DOS リダイレクションコマンド > も使用可能

<options> 	任意の TDUMP コマンドラインオプション

注意:	TDUMP の使い方についての詳細は，テキストファイル TDUMP.TXT を参照してください。


TDUMP コマンドラインオプション

TDUMP ではいくつかのオプション（省略可能）を指定できます。すべてのオプションはハイフンまたはスラッシュで始まります。以下の 2 つの例は同等です。

TDUMP -el -v demo.exe

TDUMP /el /v demo.exe

-a と -a7 オプション

TDUMP はファイルの種類に応じて自動的に出力表示を調節します。-a または -a7 オプションを指定するとファイルをテキスト形式で表示できます。

-a を指定するとファイルがテキスト形式で表示され，オフセットと内容が ASCII 文字で表示されます。表示できない文字（制御文字など）はピリオドで表示されます。

-a7 を指定すると上位 ASCII 文字が下位 ASCII 文字に変換されます。これは，ダンプ中のファイルが上位 ASCII 文字をフラグとして設定する場合に便利です（WordStar の機能）。

-j- オプションを指定している場合は，20H から 7EH までの半角文字以外は”.”で表示されます。

-b# オプション

-b# オプションを指定すると，指定したオフセットで始まる情報を表示できます。たとえば，オフセット 100 から始まる MYFILE のダンプが必要な場合は次のように指定します。

TDUMP -b100 MYFILE

-d オプション

-d オプションを指定すると，.OBJ ファイルの Borland 32 ビットデバッグ情報がダンプされます。このオプションを指定しない場合，生のデータだけが表示されます。

-e，-el，-er，および -ex オプション

これら 4 つのオプションを指定すると，ファイルは実行形式（.EXE）ファイルとして表示されます。

.EXE ファイルの表示では，オペレーティングシステムがファイルのロード時に使うファイル内の情報が表示されます。シンボルデバッグ情報がある場合はそれも表示されます（Turbo Debugger または Microsoft CodeView）。

TDUMP は DOS の実行形式ファイル，新しい形式の実行形式ファイル（Microsoft Windows と OS/2 の.EXE と .DLL ファイル），リニア実行形式ファイル，LE 形式，および Windows NT と Windows 95 で使われている移植性の高い実行形式（PE）ファイルの情報を表示します。

-el は行番号の表示を抑制する

-er はリロケーションテーブルを表示しない

-ex は新しい形式の実行形式ファイルの情報を表示しない。つまり，DOS のスタブプログラムの情報だけが表示される

-h オプション

-h オプションを指定すると，ダンプファイルが 16 進形式で表示されます。16 進形式は 1 桁のオフセット値，16 桁の 16 進数，および対応する ASCII 文字で構成されます。表示できない ASCII 文字はピリオドで表示されます。

TDUMP が入力ファイルの拡張子を認識できない場合，ファイルは 16 進形式で表示されます（ほかの形式が指定されていない場合）。

-j- オプションを指定している場合は，20H から 7EH までの半角文字以外は”.”で表示されます。

-j- オプション

-j- オプションを指定すると，-h オプションを指定した場合，または .OBJ や .LIB ファイルの ASCII ダンプを行った場合には，20H から 7EH までの半角文字以外は”.”で表示されます。デフォルトでは，全角文字は全角文字のまま表示されます。

-l と -li オプション

-l オプションを指定すると，出力ファイルがライブラリ（.LIB）ファイル形式で表示されます。ライブラリファイルはオブジェクトファイル（詳細は，-o オプションを参照）の集合です。ライブラリファイルのダンプでは，ライブラリ固有の情報，オブジェクトファイル，およびオブジェクトファイル内のレコードが表示されます。

-li オプションを指定すると，インポートライブラリのダンプ時に impdef レコードの短縮形が表示されます。検索文字列を指定する構文は次のとおりです。

-li=<string>

たとえば次のコマンドを使うと，

TDUMP -li=codeptr import.lib

次のように出力されます。

Impdef:(ord) KERNAL.0336=ISBADCODEPTR

この出力では，関数が順序数でエクスポートされることが示されています。この場合の順序数は 336（10 進数）です。さらに，この出力ではモジュールと関数名が表示されます。

次のコマンドでは，

TDUMP -li=walk import32.lib

次のように表示されます。

Impdef:(name) KERNEL32.????=HEAPWALK

これは，名前でエクスポートされた関数の出力を示します。

-m オプション

-m オプションを指定すると，オブジェクトファイル，実行形式ファイル，および Turbo Debugger シンボル情報ファイルの C++ の名前は変形されたままです。このオプションは C++ コンパイラの指定された関数とその引数に対する変形方法を決めるときに便利です。

-o，-oc，-ox，および -oi オプション

-o を指定すると，ファイルはオブジェクト（.OBJ）ファイルとして表示されます。オブジェクトファイルの表示にはリンカにコマンドとデータを渡すコマンドレコードの記述が含まれ，.EXE ファイルの作成方法を指示します。この表示形式は，各レコードとレコード単位の対応したデータを示します。

-oc を指定すると，TDUMP は見つかった各レコードに対して巡回冗長検査（CRC）を実行します。この表示方法は，間違った CRC チェックが見つかった場合のみ -o の表示方法と異なります。TDUMP CRC の値はレコードの CRC バイトとは異なります。

-ox<id> はオブジェクトモジュールダンプから指定した種類のレコードを除外します。<id> には表示しないレコード名を指定します。たとえば次のコマンドは，

TDUMP -oxPUBDEF MYMODULE.OBJ

PUBDEF レコードを除外した MYMODULE.OBJ のオブジェクトモジュールを表示します。

-oi<id> では，指定した種類のレコードだけがオブジェクトモジュールに含まれます。<id> には表示するレコード名を指定します。たとえば次のコマンドは，

TDUMP -oiPUBDEF MYMODULE.OBJ

PUBDEF レコードだけを表示する MYMODULE.OBJ のオブジェクトモジュールを表示します。

-ox と -oi オプションは，リンク時に発生するエラーを見つけるときに便利です。EXTDEF シンボルと PUBDEF シンボルのスペルや大文字と小文字の区別を調べることによって，リンクに関する多くの問題を解決できます。たとえばリンカからメッセージ「unresolved external」が表示された場合には，TDUMP -oiEXTDEF を使ってエラーの生じるモジュールの外部定義を表示し，次にリンカと適合しないパブリックシンボルを含むモジュールで TDUMP -oiPUBDEF を使います。

-oi オプションのもう一つの使い方は，特定のモジュールに生成されたセグメントの名前とサイズを検査することです。たとえば次のコマンドは，

TDUMP -oiSEGDEF MYMODULE.OBJ

MYMODULE のすべてのセグメントの名前，属性，およびサイズを表示します。

注意:	-oi と -ox のレコードの種類のリストを表示するには，コマンドラインオプション -oi? と -ox? を使います。

-R オプション

-R オプションを指定すると，TDUMP は 32 ビット PE（Win32）形式のイメージからリロケーションテーブルをダンプします。デフォルトではダンプは抑制されます。

-v オプション

-v オプションは詳細表示用に使われます。.OBJ または .LIB ファイルと一緒に使われると，TDUMP はレコードの内容の 16 進形式でダンプします（レコードについてのコメントなし）。

TDUMP を Turbo Debugger のシンボルテーブルに対して使うと，見つかった順序で情報テーブルが表示されます。TDUMP は複数のテーブルからの情報を結合しないで，モジュール単位で意味のある表示を行います。


TLINK32 および ILINK32 の使い方

関連項目

TLINK32 および ILINK32 は，オブジェクトモジュール（.OBJ ファイル），ライブラリモジュール（.LIB ファイル），およびリソースを結合して，実行形式ファイル（.EXE と .DLL）を作成するコマンドラインツールです。リンカはコンパイラから自動的に呼び出されるので，コンパイルでのリンク段階を抑制していない場合は，リンカを明示的に使う必要はありません（-c コンパイラオプションを参照してください）。

TLINK32 および ILINK32 はコマンドラインから起動され，オブジェクトモジュール，ライブラリ，リソースをリンクして実行形式ファイルを作成するために，TLINK32.CFG（ILINK32 は ILINK32.CFG を使用）という環境設定ファイル，オプションのレスポンスファイル，およびコマンドラインオプションをリンクします。

TLINK32 および ILINK32 は 32 ビット Windows コードをリンクし，32 ビットリソースリンカ RLINK32.DLL を使います。


ILINK32：インクリメンタルリンカ

関連項目

ILINK32 は，TLINK32 と同じように，オブジェクトモジュール（.OBJ ファイル），ライブラリモジュール（.LIB ファイル），およびリソースをリンクして実行形式ファイル（.EXE および .DLL）を作成します。TLINK32 との違いは，ILINK32 がリンカ状態ファイルを使って前回のリンクイメージをリンクするため，リンク処理の時間が大幅に短縮されます。

ILINK32 と TLINK32 の違い

ILINK32 と TLINK32 はどちらも 32 ビット実行形式ファイルを作成しますが，異なる点がいくつかあります。

リンカ状態ファイル

プロジェクトの構築を初めて行うとき，ILINK32 は 4 つの読み出し専用のリンカ状態ファイルを作成して，プロジェクトの .OBJ 情報と .LIB 情報を格納します。次に同じプロジェクトを構築またはメイクするときには，ILINK32 はリンカ状態ファイルを読み出してプロジェクトのリンクにかかる時間を短縮します。

リンカ状態ファイルの名前は <プロジェクト名>.IL? です。<プロジェクト名> はプロジェクトの .MAK ファイルと同じで，? の位置には，4 つのリンカ状態ファイルを区別する文字が入ります。

デフォルトでは，C++Builder は初めてロードされたときに自動的にリンカ状態ファイルの初期セットを作成して，C++Builder の BIN ディレクトリに格納します。デフォルトのリンカ状態ファイルを再生成する必要がある場合は，C++Builder のコマンドラインオプション -deflink を指定すれば，C++Builder はロード時にリンカ状態ファイルを作成します。

デバッグ情報ファイル

最終的な実行形式ファイルにデバッグ情報を含める場合，ILINK32 は必ず別個の .TDS ファイル（デフォルトは <プロジェクト名>.TDS）にデバッグ情報を格納します。C++Builder の統合デバッガと Turbo Debugger はどちらもこのデバッグ情報ファイルを使用します。

リンカスイッチ

ILINK32 は，TLINK32 のほとんどのスイッチをサポートしています。ILINK32 は以下のリンカスイッチをサポートしていません。

/Enn	エラーの最大数

/Gx	非常中テーブルスイッチ

/n	デフォルトライブラリの無効化

/o	序数値でインポート

/P	コードセグメントのパック

/r	処理経過表示

ILINK32 は，TLINK32 にはない次のスイッチをサポートしています。

/C	リンクの前にリンカ状態ファイルをすべて削除する

/t	リンク時間の表示


TLINK コマンドラインの構文
TLINK32 と ILINK32 のコマンドラインの構文

リンカ構文はリンカの処理方法を制御します。リンカコのマンドラインオプションは大文字と小文字が区別されます。特に指定がない限り，TLINK32 の命令とオプションは ILINK32 にも適用されます。

リンカは，通常はコマンドラインで入力するオプションのかわりに TLINK32.CFG という環境設定ファイルも使えます。

構文

TLINK32 | ILINK32 [@respfile][options] startup myobjs, [exe], [mapfile], [libraries], [deffile], [resfile]

[@respfile]	レスポンスファイルは，通常はコマンドラインに入力するリンカオプションとファイル名のリストを含むテキストファイル。オプションとファイル名をレスポンスファイルに記述すると，アプリケーションをリンクするためのキーストロークを省ける

[options]	リンカの処理方法を制御するリンカオプション。たとえば，オプションで .EXE ファイルを作成するのか DLL ファイルを作成するのかを指定する。リンカオプションの前に必ずスラッシュ（/）またはハイフン（-）を付ける

startup	各種のプログラムセグメントの順序を管理している実行形式ファイルまたは DLL ファイルのためのボーランドの初期化モジュール。適切な初期化モジュールをリンクしないと，通常，識別子が解決できない，スタックが作成されなかった，などという内容を報告する数多くのエラーメッセージが表示される

myobjs	リンクする .OBJ ファイル。カレントディレクトリ以外にあるファイルにはパスを指定する。ファイルの拡張子が指定されていない場合，リンカは拡張子 .OBJ を付加する

[exe]	実行形式ファイル（.COM，.EXE，または .DLL）に付ける名前。実行形式ファイル名を省略すると，TLINK により最初のオブジェクトファイル名に .EXE または .DLL が付加されて実行形式ファイルの名前が決まる。（TLINK は，拡張子がない実行形式ファイルに対して .EXE 拡張子を想定または付加する。また，拡張子がないダイナミックリンクライブラリに対しては .DLL 拡張子を想定または付加する）

[mapfile]	マップファイルに付ける名前。名前を省略すると，マップファイル名は実行形式ファイルと同じ方法で決まる（ただし，拡張子 .MAP が付加される）。ファイルの拡張子が指定されていない場合，リンカは拡張子 .MAP を付加する

[libraries]	リンク時に取り込むライブラリファイル。カンマを使ってリストのライブラリを区切らない。ファイルがカレントディレクトリまたはサーチパス（/L オプションを参照）にない場合，リンク文にパスを記述する必要がある。ファイル拡張子が指定されていない場合，リンカは拡張子 .LIB を付加する

リストでのライブラリの順序はとても重要で，以下の一覧に定義されている順番で使われます。

Code Guard ライブラリ（必要な場合）

任意のユーザーライブラリを一覧表示し，関数が 2 回以上定義されていれば知らせる。リンカは最初に見つかった定義を使う

DOS オーバーレイを作成している場合，DOS オーバーレイモジュール OVERLAY.LIB をリンクする

DPMI ライブラリ（DOS DPMI アプリケーションのみ）

IMPORT.LIB（Windows API を使う実行形式を作成している場合）

数値演算ライブラリ（必要な場合）

メモリモデルとプラットフォームに対応したランタイムライブラリ

[deffile]	Windows 実行形式ファイルのモジュール定義ファイル。モジュール定義（.DEF）ファイルを省略して /Twe オプションや /Twd オプションを使うと，リンカはデフォルト設定に基づいてアプリケーションを作成する。リンカは拡張子がない場合  ，拡張子 .DEF を付加する

[resfile]	実行形式ファイルに結合する .RES ファイル（コンパイル  されたリソースファイル）のリスト。リンカは拡張子がない場合，拡張子 .RES を付加する


TLINK.CFG ファイル
TLINK32.CFG ファイル

TLINK32 は，通常，コマンドラインで入力するオプションのかわりに TLINK32.CFG という環境設定ファイルを使います（環境設定ファイルにはオプションのみを指定でき，ファイル名は指定できないことに注意してください）。環境設定ファイルを用いると頻繁に使うオプションを保存でき，同じオプションを繰り返し再入力する必要がなくなります。

TLINK32 は TLINK32.CFG をまずカレントディレクトリで探し，次に TLINK32 がロードされたディレクトリで探します。

TLINK32.CFG ファイルが以下のような場合，TLINK32 は，まずコンパイラの ..\LIB ディレクトリで，次に C:\WINAPPS\LIB でライブラリを探し，作成する実行形式ファイルにデバッグ情報を取り込んで，詳細セグメントマップを作成し，Windows 実行形式ファイル（.DLL ではなく .EXE）を作成します。

;Sample TLINK32.CFG file

/Lc:\BCB\LIB;c:\WINAPPS\LIB

/v /s

/Tpe

注意:	環境設定ファイルにコマンドラインオプションを追加して指定すると，追加したコマンドラインオプションが衝突する環境設定オプションをオーバーライドします。


リンカレスポンスファイル

コマンドラインリンカでレスポンスファイルを使うと，リンカオプションを指定できます。

レスポンスファイルは，通常はコマンドラインで入力するリンカオプションやファイル名が記述されたテキストファイルです。レスポンスファイルを使うと，オペレーティングシステムがサポートするよりも長いコマンドラインを指定でき，同じ情報を繰り返し再入力する必要がなくなります。レスポンスファイルは環境設定ファイルと同じ情報を取り込むことができ，さらにファイル名も取り込めます。

コマンドラインとは異なり，レスポンスファイルは複数行にわたって記述できます。レスポンスファイルで同一の要素を複数行にわたって記述するには，行末に正符号（+）を入力してから次の行への入力を続けます。オプションを有効にするための正符号を使ったオプションで行が終わっていても（たとえば /v+），この + は行継続文字とはみなされないことに注意してください（行を続けるには /v+ + を使用）。

レスポンスファイルでコマンドライン要素を別々の行に分ける場合（たとえば .OBJ ファイルを .LIB ファイルと分けるなど），コマンドラインで要素を区切るために用いるカンマは必ず取り除いてください。たとえば，以下に示す指定について考えます。

/c c0ws+

myprog,myexe

mymap

mylib cws

上記の指定は，以下のようなコマンドライン上のコマンドから不要なカンマを取り除いたものです。

TLINK32 /c c0ws myprog,myexe,mymap,mylib cws

レスポンスファイルを使う手順は以下のとおりです。

1.	テキストファイルにコマンドラインオプションとファイル名を入力し，このファイルを保存します。C++Builder のレスポンスファイルには .RSP という拡張子が付いています。

2.	TLINK32 @[path]RESFILE.RSP と入力します。この記述での RESFILE.RSP はレスポンスファイルの名前です。

次のように入力すると複数のレスポンスファイルを指定できます。

tlink32 /c @listobjs.rsp,myexe,mymap,@listlibs.rsp

注意:	レスポンスファイルにコメントを追加するには，セミコロン（;）を使います。リンカはセミコロンに続くテキストを無視します。


BCC32.EXE からの TLINK32 の使用

.OBJ と .LIB の拡張子を付けてコマンドラインからファイル名を入力すると，コマンドラインコンパイラ（BCC32.EXE）を通して TLINK にオプションとファイル名を渡せます。たとえば，次のように指定します。

BCC32 mainfile.obj sub1.obj mylib.lib

この場合，MAINFILE.OBJ，SUB1.OBJ，MYLIB.LIB がリンクされて実行形式ファイル MAINFILE.EXE が作成されます。

注意:	デフォルトでは，BCC32 は C0W32.OBJ，CW32.LIB，および IMPORT32.LIB（それぞれ初期化モジュール，ランタイムライブラリ，および Windows インポートライブラリ）を使って TLINK32 を呼び出します。また，必ずリンカに /c（大文字と小文字を区別するリンク）オプションを渡します。


モジュール定義ファイル

例

モジュール定義ファイルは，Windows アプリケーションの内容とシステム要求に関する情報を TLINK32 および ILINK32 に与えるテキストファイルです。IMPDEF を使うとモジュール定義ファイルを作成でき，IMPLIB を使うとモジュール定義ファイルからインポートライブラリを作成できます。

C++Builder では，.DEF ファイルを使用するためのオプションはプロジェクトの .MAK ファイルに指定します。

モジュール定義ファイル使い，.EXE ファイルまたは .DLL ファイルの名前を指定する，アプリケーションタイプを識別する，インポートする関数とエクスポートする関数のリストを指定する，コードセグメントとデータセグメントの属性を記述し，追加のコードセグメントとデータセグメントの属性を記述できるようにする，スタックのサイズを指定する，スタブプログラムの取り込みを可能にするといったことを行います。

このモジュール定義ファイルの特定の要素には以下のものがあります。

CODE 文

DATA 文

DESCRIPTION 文

EXETYPE 文

EXPORTS 文

HEAPSIZE 文

IMPORTS 文

LIBRARY 文

NAME 文

SECTIONS 文

SEGMENTS 文

STACKSIZE 文

STUB 文

SUBSYSTEM 文

モジュール定義ファイルを省略した場合

モジュール定義ファイルを省略すると，以下を指定したものとみなされます。

CODE	PRELOAD MOVEABLE DISCARDABLE

DATA	PRELOAD MOVEABLE MULTIPLE   ; （アプリケーションの場合）

PRELOAD MOVEABLE SINGLE     ; （DLL の場合）

HEAPSIZE	4096

STACKSIZE	1048576

アプリケーションの属性をデフォルト以外に変更したい場合はモジュール定義ファイルを作成する必要があります。

EXETYPE 文を削除した場合，C++Builder リンカは IDE での設定またはコマンドラインでのオプションから，作成する実行形式ファイルの種類を決定できます。

インポートライブラリを取り込むと，モジュール定義ファイルの IMPORTS セクションのかわりにできます。

C と C++ のソースコードでエクスポート関数を定義するときに _export キーワードを使うと，EXPORTS セクションが不要になります。ただし，_export でエクスポートした関数は，順序数ではなく名前でエクスポートされることに注意してください（通常は順序数の方が効率的）。


CODE 文 （モジュール定義ファイル）

関連項目

CODE はコードセグメントのデフォルト属性を定義します。コードセグメント名は任意ですが，CODE で終わる名前（CODE または MYCODE のような）を持つセグメントクラスに属していることが条件です。32 ビットの構文は以下のとおりです。

CODE [PRELOAD | LOADONCALL]

     [EXECUTEONLY | EXECUTEREAD]

PRELOAD は呼び出しプログラムがロードされるときにコードがロードされることを示す

LOADONCALL（デフォルト）はプログラムが呼び出されるときにコードがロードされることを示す

EXECUTEONLY はコードセグメントの実行のみ行えることを示す

EXECUTEREAD（デフォルト）はコードセグメントの読み込みと実行を行えることを示す

FIXED（デフォルト）はセグメントが固定されたメモリの位置にあることを示す

MOVEABLE はセグメントが移動できることを示す

DISCARDABLE は，必要がなくなった場合にセグメントを破棄できることを示す（MOVEABLE の意味を含む）

NONDISCARDABLE（デフォルト）はセグメントが破棄できないことを示す


DATA 文（モジュール定義ファイル）

関連項目

DATA はデータセグメントのデフォルト属性を定義します。構文は以下のとおりです。

DATA [NONE | SINGLE | MULTIPLE]

     [READONLY | READWRITE]

     [PRELOAD | LOADONCALL]

     [SHARED | NONSHARED]

NONE はデータセグメントを作成しないことを示す。このオプションは .DLL に限る

SINGLE（.DLL ファイルのデフォルト）は 1 つのデータセグメントが作成されてすべてのプロセスに共有されることを示す

MULTIPLE（.EXE ファイルのデフォルト）はデータセグメントがそれぞれのプロセスに対して作成されることを示す

READONLY はデータセグメントの読み込みのみを行えることを示す

READWRITE（デフォルト）はデータセグメントの読み込みと書き込みを行えることを示す

PRELOAD はデータセグメントを使うモジュールが最初にロードされるときにロードされることを示す

LOADONCALL（デフォルト）はデータセグメントが最初にアクセスされるときにロードされることを示す（32 ビットアプリケーションでは無視）

SHARED（16 ビット .DLL ファイルのデフォルト）は 1 つのデータセグメントのコピーがすべてのプロセスに共有されることを示す

NONSHARED（プログラムと 32 ビット .DLL のデフォルト）は，データセグメントのコピーがこのデータセグメントを使う必要のあるプロセスごとにロードされることを意味する


DESCRIPTION 文（モジュール定義ファイル）

関連項目

DESCRIPTION（オプション）はアプリケーションモジュールに文字列を挿入し，通常はプログラムの作者名，日付，著作権などの情報を記述するのに使います。構文は次のとおりです。

DESCRIPTION 'Text'

Text は ASCII 文字列であり，単引用符で囲みます。


EXETYPE 文（モジュール定義ファイル）

関連項目

EXETYPE はデフォルトの実行形式ファイル（.EXE）のヘッダータイプ（16 ビットアプリケーション用）を定義します。下位互換性のため 32 ビットアプリケーションではこのセクションをそのまま使えます。ただし EXETYPE を変更する必要がある場合には，NAME 文を参照してください。EXETYPE の構文は次のとおりです。

EXETYPE  [WINDOWS]


EXPORTS 文 （モジュール定義ファイル）

関連項目

EXPORTS はエクスポートする関数の名前と属性を定義します。EXPORTS キーワードで定義の始まりを示します。この後ろには必要なだけエクスポート定義を指定でき，定義はそれぞれ別の行に指定します。構文は次のとおりです。

EXPORTS

   ExportName [Ordinal]

   [RESIDENTNAME] [Parameter]

ExportName はエクスポートするシンボルを定義する ASCII 文字列で，書式は次のようになる

EntryName [=InternalName]

InternalName はこのエントリを参照するためにアプリケーション内で使う名前

EntryName は実行形式ファイルのエントリテーブルに列挙される名前であり，外部から参照できる

Ordinal は関数の順序数を定義し，書式は次のようになる

@ordinal

ここでの ordinal は順序数を指定する整数値

アプリケーションモジュールや DLL モジュールが DLL からエクスポートされた関数を呼び出す場合，呼び出し側のモジュールは関数を名前または順序数で参照できる。順序数で関数を参照すると，関数を特定するときに文字列の比較が不要であるために高速になる。使用するメモリを少なくするには，（関数の DLL の観点から）関数を順序数でエクスポートし，（呼び出し側のモジュールの観点から）順序数でインポートまたは呼び出しを行う

関数を順序数でエクスポートすると，常駐していない名前テーブルに置かれる。関数を名前でエクスポートすると，名前は常駐の名前テーブルに置かれる。モジュールの常駐名前テーブルは，モジュールがロードされている間は常にメモリに存在するが，常駐していない名前テーブルは常に存在するわけではない

RESIDENTNAME は関数の名前を常に常駐させるための指定です。これは順序数でエクスポートする場合にのみ有効（デフォルトでは名前は常駐しない）

Parameter はオプションの整数値であり，関数に引数として渡すワード数を指定


HEAPSIZE 文（モジュール定義ファイル）

関連項目

HEAPSIZE は，アプリケーションのローカルヒープに必要なバイト数を定義します。ローカルメモリを割り当てるとき，アプリケーションは必ずローカルヒープを使います。

HEAPSIZE の 32 ビットの構文は次のとおりです。

HEAPSIZE Reserve[, Commit]

Reserve は 10 進数値または 16 進数値で指定し，デフォルトは 1MB 。下位（16 ビット）互換性を補うために，.DEF ファイルで確保した値が 64KB より小さい場合，リンカはデフォルト値の 1MB を使う

Commit は 10 進数値または 16 進数値で指定する。コミットサイズは省略可能で，指定されない場合はデフォルトの 4KB が使われる。指定できる最小コミットサイズは 0。また，コミットサイズの指定値またはデフォルト値は必ず確保サイズよりも小さいかまたは等しくなければならない

確保したメモリは，物理メモリまたはページングファイルのいずれかに割り当てられる最大メモリ量を表します。つまり，確保したメモリは最大可能ヒープサイズを定義します。オペレーティングシステムは，指定メモリ量が確保され，必要な場合は割り当てられることを保証します。

コミットしたメモリの意味はオペレーティングシステムによって異なります。Windows NT では，コミットしたメモリはアプリケーションのロードや初期化時にヒープに対して割り当てられる物理メモリ量を表します。コミットしたメモリは，物理メモリまたはページングファイルにスペースを割り当てます。高いコミット値は，アプリケーションがヒープスペースをより多く必要とするときに時間を節約しますが，メモリ必要量と起動に要する時間が増加します。

/H または /Hc コマンドラインオプションを使って，.DEF ファイルで指定したヒープ確保サイズとコミットサイズをオーバーライドできます。/H を使うと，.DEF ファイルで指定できる最小値 64KB より小さいヒープ確保サイズを指定できます。


IMPORTS 文 （モジュール定義ファイル）

関連項目

IMPORTS は DLL からインポートする関数の名前と属性を定義します。IMPORTS 文でインポートする DLL 関数のリストを指定するかわりに以下の 2 通りの方法があります。

TLINK32 コマンドラインで DLL のインポートライブラリを指定する

IDE のプロジェクトマネージャで DLL のインポートライブラリを取り込む

関数，クラス，またはデータをインポートするには __import を使わなければなりません。

IMPORTS キーワードで定義の始まりを示します。この後ろには必要なだけインポート定義を指定でき，定義はそれぞれ別の行に指定します。構文は次のとおりです。

IMPORTS

[InternalName=]ModuleName.Entry

InternalName は ASCII 文字列であり，関数を呼び出すためにアプリケーションで使うユニークな名前を指定

ModuleName は 1 文字以上の大文字の ASCII 文字であり，関数を含む実行形式モジュールの名前を定義。モジュール名は実行形式ファイルの名前と一致させる。たとえば，ファイル SAMPLE.DLL のモジュール名は SAMPLE

Entry はインポートする関数を指定します。これは関数の名前を指定する ASCII 文字列または関数の順序数を示す整数


LIBRARY 文 （モジュール定義ファイル）

関連項目

LIBRARY は DLL モジュールの名前を定義します。モジュール定義ファイルには，.DLL を指定する LIBRARY 文か.EXEを指定する NAME 文を指定できます。

ライブラリのモジュール名は実行形式ファイルの名前と一致させてください。たとえば，ライブラリ MYLIB.DLL のモジュール名は MYLIB です。構文は次のとおりです。

LIBRARY LibraryName [INITGLOBAL | INITINSTANCE]

LibraryName（オプション）は ASCII 文字列で，ライブラリモジュールの名前を定義する。LibraryName を省略すると，拡張子を取り除いたファイル名を指定したものとみなされる。モジュール定義ファイルで NAME 文も LIBRARY 文も省略すると，ModuleName 引数がない NAME 文を指定したものとみなされる

INITGLOBAL は，ライブラリモジュールがメモリに最初にロードされるときのみライブラリ初期化ルーチンが呼び出されることを示す

INITINSTANCE は，新しいプロセスがライブラリを使うたびにライブラリ初期化ルーチンが呼び出されることを示す


NAME 文（モジュール定義ファイル）

関連項目

NAME はアプリケーションの実行形式モジュールの名前です。関数のエクスポートのときにモジュール名でモジュールを識別できるようになります。

NAME ModuleName [WINDOWSAPI] | [WINDOWCOMPAT]

ModuleName（オプション）は 1 文字以上の大文字の ASCII 文字列であり，実行形式モジュールの名前を指定します。この名前は実行形式ファイルの名前と一致させてください。たとえば，実行形式ファイル SAMPLE.EXE を持つアプリケーションのモジュール名は SAMPLE です。

ModuleName を省略すると，実行形式ファイルのファイル名と一致するモジュール名を指定したものとみなされます。たとえば，モジュール名の指定を省略し，実行形式ファイルの名前が MYAPP.EXE である場合，モジュール名 MYAPP を指定したものとみなされます。

モジュール定義ファイルで NAME 文も LIBRARY 文も省略すると，ModuleName 引数がない NAME 文を指定したものとみなされます。

NAME 文と LIBRARY 文はモジュール定義ファイルのその他のどのような文よりも先に記述しなければなりません。

WINDOWSAPI は Windows 実行形式ファイルを示し，TLINK32 のオプション /aa と同等の機能がある

WINDOWCOMPAT は Windows 互換キャラクターモードの実行形式ファイルを示し，TLINK32 のオプション /ap と同等の機能がある


SECTIONS 文（モジュール定義ファイル）

関連項目

SECTIONS 文を使うと，実行イメージの 1 つまたは複数のセクションで属性を設定できます。この文を使うと，異なる各セクションのデフォルトの属性をオーバーライドできます。SECTIONS の構文は次のとおりです。

SECTIONS

<section_name> (CLASS 'classname'] attributes

SECTIONS はセクションの定義リストの始まりを示す

SECTIONS キーワードの後，各セクションの定義は別々の行で指定しなければならない。ただし，SECTIONS キーワードは最初の定義と同じ行または先行する行のどちらにあってもかまわない。また，.DEF ファイルには 1 つまたは複数の SECTIONS 文を指定できる。SEGMENTS キーワードは SECTIONS と同義でサポートされている。各セクションのリストの構文は次のとおり

この構文で，section_name は大文字と小文字を区別します。CLASS キーワードは互換性のためにサポートされていますが，無視されます。属性の引数には EXECUTE，READ，SHARED，および WRITE のいずれか 1 つまたは複数を指定できます。


SEGMENTS 文（モジュール定義ファイル）

関連項目

SEGMENTS は追加のコードセグメントとデータセグメントのセグメント属性を定義します。構文は以下のとおりです。

SEGMENTS

   SegmentName [CLASS 'ClassName']

   [MinAlloc]

   [SHARED | NONSHARED]

   [PRELOAD | LOADONCALL]

   [MIXED1632]

SegmentName は新規のセグメントの名前を指定する文字列。標準のセグメント名 _TEXT と _DATA（それぞれ標準のコードセグメントとデータセグメントを表す）を含んでいればどのような名前を指定してもかまわない

ClassName（オプション）は指定したセグメントのクラス名。クラス名を省略すると，クラス名 CODE を指定したものとみなされる

MinAlloc（オプション）は整数値であり，セグメントの最小割り当てサイズを指定する。TLINK と TLINK32 はこの値を無視

SHARED（16 ビットの .DLL ファイルのデフォルト）は 1 つのデータセグメントのコピーがすべてのプロセスに共有されることを示す

NONSHARED（.EXE と 32 ビットの .DLL ファイルのデフォルト）は，データセグメントのコピーがこのデータセグメントを使う必要のあるプロセスごとにロードされることを示す

PRELOAD はセグメントがただちにロードされることを示す。

LOADONCALL はセグメントがアクセスされるときまたは呼び出されるときにロードされることを示します（TLINK32 では無視）。リソースコンパイラは LOADONCALL オプションをオーバーライドし，かわりにセグメントをあらかじめロードすることもあります。

MIXED1632（オプション）は 16 ビットリンカのみでサポートされ，32 ビットモジュールと 16 ビット Windows 95 アプリケーションをリンクする。Windows 95 の 16 ビットローダーは，アプリケーションのセグメントテーブルで 2000H が設定されている場合に 32 ビットセグメントをサポートする


STACKSIZE 文 （モジュール定義ファイル）

関連項目

STACKSIZE はアプリケーションのローカルスタックに必要なバイト数を定義します。アプリケーションは関数呼び出しを行うときに必ずローカルスタックを使います。

STACKSIZE の 32 ビット構文は次のとおりです。

STACKSIZE Reserve[, Commit]

Reserve は 10 進数値または 16 進数値であり，デフォルトは 1MB。下位（16 ビット）互換性を補うため，.DEF ファイルで 64KB より小さい確保値を指定してある場合にリンカはデフォルトの 1MB を使う

Commit は 10 進数値または 16 進数値で指定。コミットサイズは省略可能で，指定されていない場合はデフォルトの 8KB が使われる。指定できる最小コミットサイズは 4KB。さらに，指定コミットサイズまたはデフォルトコミットサイズは確保サイズより小さいか等しくなければならない

確保したメモリは，物理メモリまたはページングファイルのいずれかに割り当てられる最大メモリ量を表します。つまり，確保したメモリは最大可能スタックサイズを定義します。オペレーティングシステムは，指定メモリ量が確保され，必要な場合は割り当てられることを保証します。

コミットしたメモリの意味はオペレーティングシステムによって異なります。Windows NT では，コミットメモリはアプリケーションのロードや起動時にスタックに対して割り当てられる物理メモリ量を表します。コミットしたメモリは，物理メモリまたはページングファイルにスペースを割り当てます。高いコミット値は，アプリケーションがヒープスペースをより多く必要とするときに時間を節約しますが，必要メモリ量と起動に要する時間が増加します。

/S または /Sc コマンドラインオプションを使って，.DEF ファイルで指定したスタック確保サイズとコミットサイズをオーバーライドにできます。/S を使うと，.DEF ファイルで指定できる最小値 64KB より小さいスタック確保サイズを指定できます。

.DLL ファイルのコンパイル時に STACKSIZE 文は使わないでください。


STUB 文 （モジュール定義ファイル）

関連項目

STUB は FileName で指定した DOS の実行形式ファイルをモジュールの始めに追加します。実行形式スタブは，誤った環境で実行されると警告メッセージを表示して終了します（たとえば，DOS 環境で Windows アプリケーションを実行しようとする場合）。

C++Builder では，STUB 文で別のスタブを指定しない限り Windows アプリケーションの始めに組み込みスタブを追加します。リンカは自動的に WINSTUB.EXE を取り込むので，このために STUB 文を使う必要はありません。

構文は次のとおりです。

STUB 'FileName'

FileName はモジュールに追加される DOS の実行形式ファイルの名前。この名前は DOS のファイル名規定に従う。FileName で指定したファイルがカレントディレクトリに存在しない場合，TLINK は PATH 環境変数で指定したディレクトリでファイルを探す


SUBSYSTEM 文（モジュール定義ファイル）

関連項目

SUBSYSTEM は  ，リンクされているアプリケーションの Windows サブシステムおよびサブシステムバージョン番号を指定します。SUBSYSTEM の構文は次のとおりです。

SUBSYSTEM [subsystem,]subsystemID

省略可能なパラメータの subsystem は WINDOWS，WINDOWAPI，WINDOWCOMPAT，および NOTWINDOWCOMPAT のいずれかを指定。subsystem を指定しない場合，リンカがデフォルトの WINDOWS サブシステム（3.1）を使う

形式 d.d（d は 10 進数）を使って subsystemID パラメータを指定する必要がある。たとえば，Windows バージョン 4.0 を指定する場合，以下の 2 つの SUBSYSTEM 文のいずれかを使う

SUBSYSTEM 4.0

SUBSYSTEM WINDOWS,4.0

.DEF ファイルに指定した SUBSYSTEM 文を無効にするには，/a と /V コマンドラインオプションを使います。


モジュール定義ファイルの例

関連項目

以下にモジュール定義ファイルの実例を示します。

NAME    	WHELLO

DESCRIPTION	'C++ Windows Hello World'

EXETYPE	WINDOWS

CODE  	MOVEABLE

DATA    	MOVEABLE MULTIPLE

HEAPSIZE 	1024

STACKSIZE	5120

EXPORTS  	MainWindowProc

このファイルを文ごとに分析したものを以下に示します。

NAME はアプリケーションの名前を指定する。アプリケーションではなく .DLL ファイルを作成する場合は，NAME のかわりに LIBRARY を使う。すべてのモジュール定義ファイルでは NAME 文または LIBRARY 文を指定する必要があるが，両方とも指定することは不可。指定した名前は実行形式ファイルと同じでなければならない

DESCRIPTION はアプリケーションまたはライブラリを説明する文字列を指定する

EXETYPE は WINDOWS または OS2 のいずれかを指定する。  ただし，C++Builder の今回のバージョンでは WINDOWS のみをサポート

CODE はコードセグメントのデフォルトの属性を定義する。MOVEABLE オプションは，コードセグメントが実行時にメモリ内で移動できることを示す

DATA はデータセグメントのデフォルトの属性を定義する。MOVEABLE は，実行時にメモリ内で移動できることを示す。Windows では，アプリケーションの複数のインスタンスを 1 度に実行可能。このため，MULTIPLE オプションを指定すると，確実にアプリケーションの各インスタンスがそれぞれのデータセグメントを持つ

HEAPSIZE はアプリケーションのローカルヒープサイズを指定する

STACKSIZE はアプリケーションのローカルスタックサイズを   指定する。STACKSIZE 文を .DLL のスタック作成には使えない

EXPORTS は，別のアプリケーションまたは Windows から呼び出される WHELLO アプリケーションの関数を一覧表示する。別のモジュールから呼び出されるように作成されている関数はコールバック，コールバック関数，またはエクスポート関数と呼ばれる

C++Builder で提供されている _export キーワードを使うと，長い EXPORTS セクションを作成して管理する必要がなくなる。_export として示された関数は，リンカによって識別され，モジュールのエクスポートテーブルに登録される。コンパイル時にスマートコールバックオプション（BCC32 コマンドラインの /WS，または［オプション(O)｜プロジェクト(P)｜16 ビットコンパイラ｜Entry/Exit コード｜Windows スマートコールバック，全関数エクスポート可能(S)］）を使うと，コールバック関数を EXPORTS 文で列挙したり _export キーワードで指定する必要がなくなる。C++Builder は関数がコールバック関数になるようにコンパイルする

このアプリケーションに IMPORTS 文がないのは，別のモジュールから呼び出す関数が Windows API の関数だけであるため。このような関数はインポートライブラリ IMPORT.LIB が自動的に取り込まれることでインポートされる。アプリケーションで別の外部関数を呼び出す必要がある場合には，関数を IMPORTS 文で指定するかインポートライブラリから取り込む

このアプリケーションには STUB 文がありません。C++Builder では Windows アプリケーション用の組み込みスタブを使います。この組み込みスタブは単にアプリケーションが Windows 環境以外で実行された場合にロードされ，Windows が必須というメッセージを出力してアプリケーションを終了します。独自のスタブを記述して使いたい場合は STUB 文でスタブの名前を指定します。


トライグラフ（文字変換ユーティリティ）

トライグラフとは，一部のキーボードで使用できない，C 言語で使用される特定の文字と置換される 3 文字のシーケンスです。コンパイラでトライグラフを変換するとコンパイルがかなり遅くなるので，Borland C++ は，必要なときにトライグラフシーケンスを処理するための TRIGRAPH.EXE というフィルタを備えています。このプログラムを呼び出すための構文は次のとおりです。

TRIGRAPH [-u] file(s) [...]

TRIGRAPH.EXE が認識するトライグラフシーケンスを次の表に示します。

トライグラフ	文字

??=	#

??(	[

??)	]

??/	\

??'	^

??<	{

??>	}

??!	|

??-	~