MAKE の指令
MAKE.EXE への移動
MAKE の指令は、C や Pascal などの言語の指令に似ています。 MAKE では、指令によってさまざまな制御機能(コマンドを画面に表示してから実行するなど)を実行します。 MAKE の指令は、感嘆符またはピリオドのいずれかで始まります。また、指令は、コマンドラインで指定されたどのオプションよりも優先されます。 感嘆符で始まる指令は、新しい行の先頭に記述しなければなりません。
MAKE の指令とそのコマンドライン オプション
次の表に、MAKE の指令とそれに対応するコマンドライン オプションを示します。
指令 | オプション (使用できる場合) | 説明/例 |
---|---|---|
|
|
自動依存チェックをオンにします。
自動依存とは、ビルド対象のターゲットに自動的にインクルードされるファイル(C++ ソース コード内のヘッダー ファイルなど)のことです。 |
|
|
自動依存のキャッシングをオンにします。 |
|
| |
|
C の else if と同様の動作をします。 | |
|
C の else と同様の動作をします。 | |
|
| |
|
MAKE を停止し、エラー メッセージを出力します。 !error 指令の構文は:
MAKE は、処理を停止させ、この指令が出ると、次の文字列を出力します: 次の例のように、条件文に !if !$d(MYMACRO) #MYMACRO が定義されていない場合 !error MYMACRO が定義されていません ! endif
エラーチェック制御: MAKE には、次の 4 つのエラーチェック制御があります。
| |
|
条件文を開始します。 | |
|
C の | |
|
C の | |
|
|
MAKE は、コマンドの戻り値を無視します。 |
|
この指令は、C または C++ 言語の
ファイル名は、二重引用符 しかし、1 つの makefile 内に複数の ルール、コマンドまたは指令は、1 つのソース ファイル内で完結する必要があります。コマンドを | |
|
|
MAKE が作成する一時ファイルを保存します(通常、MAKE はそうしたファイルを削除します)。 |
|
MAKE が makefile を実行している間、メッセージを標準出力に出力します。
!message ここで定義されるマクロ: $(MacroName) MAKE はこの行を解釈し、画面に次のように出力します(マクロが .CPP に展開される場合)。
| |
|
|
自動依存チェックをオフにします。 |
|
|
自動依存のキャッシングをオフにします。 |
|
|
.Ignore をオフにします。 |
|
|
MAKE が作成する一時ファイルを保存しません。 |
|
|
MAKE は、コマンドを表示してからそのコマンドを実行します。 |
|
|
MAKE に対し、コマンドを実行前に、MAKE 自身をメモリからスワップ アウトしないよう指示します。 |
|
MAKE に対し、path ディレクトリ内の MAKE に対し、
| |
|
ビルドが失敗してもターゲットは保存します。 MAKE ビルドが失敗した場合、MAKE はターゲット ファイルを削除します。
| |
|
|
MAKE は、先にコマンドを表示せずに、そのコマンドを実行します。 |
|
あいまいな依存関係に対する暗黙ルールを決定します。
ここでの たとえば、次の行、
次の .suffixes: .asm .c .cpp myprog.exe: myprog.obj bcc32 myprog.obj .cpp.obj: bcc32 -P -c $< .asm.obj: tasm /mx $ .c.obj: bcc32 -P- -c $< | |
|
|
MAKE に対し、コマンド実行前に、MAKE 自身をメモリからスワップ アウトするよう指示します。 |
|
マクロ定義をクリアします。 これ以降、そのマクロは未定義となります。
|
指令でのマクロの使用
!if 条件指令と一緒に $d マクロを使用すると、特定のマクロが定義されている場合にいくつかの処理を実行できます。 $d の後に記述するマクロ名は、次の例のように、かっこ、または中かっこで囲みます。
!if $d(DEBUG) #If DEBUG is defined, bcc32 -v f1.cpp f2.cpp #compile with debug information; !else #otherwise bcc32 -v- f1.cpp f2.cpp #don't include debug information. !endif
NULL マクロ
!ifdef MacroName
テストで、未定義のマクロ名は false
を返しますが、null で定義された MacroName
は true
を返します。 null マクロを定義するには、スぺースか改行文字の後に続いて等号(=
)を使用してください。 たとえば、次の行は makefile で null マクロを定義しています:
NULLMACRO =
または、MAKE のコマンドラインで、次の行を指定することによって NULL マクロを定義できます。
NULLMACRO ="" -DNULLMACRO
!if 指令とその他の条件指令
!if
指令は、C の if
文と同様の動作をします。 次に示すように、!if
指令とその他の条件指令の構文は、コンパイラの条件指令に似ています。
|
|
|
|
|
|
|
|
|
|
次の式は等価です:
!ifdef macro /* is equivalent to */ !if $d(macro) ifndef macro /* is equivalent to */ !if !$d(macro)
条件指令には次の規約が適用されます:
!if
、!ifdef
、!ifndef
と、!endif
の指令の間に、!else
指令は 1 つしか入れられません。!if
、!ifdef
、!ifndef
、!else
と!endif
の指令の間に、!elif
指令は複数入れることができます。- 複数の条件指令に渡って、ルールを分割することはできません。
- 条件指令はネストさせることができます。
!if
、!ifdef
、!ifndef
は、対応する!endif
指令が同じファイル内になければなりません。
!if
と !endif
の指令の間には、次の情報を含めることができます:
- マクロ定義
- 明示的ルール
- 暗黙ルール
- Include 指令
- !error 指令
- !undef 指令
if
文中の条件式は、10進数、8進数、または16進数の定数と、次の表に示す演算子で構成されます。
演算子 | 説明 | 演算子 | 説明 |
---|---|---|---|
|
否定 |
|
条件式 |
|
2 の補数 |
|
論理 NOT |
|
加算 |
|
右へシフト |
|
減算 |
|
左へシフト |
|
乗算 |
|
ビット and |
|
除算 |
|
ビット or |
|
剰余 |
|
ビット xor |
|
論理 AND |
|
以上 * |
|
論理 OR |
|
以下 * |
|
より大きい |
|
等しい * |
|
より小さい |
|
等しくない * |
- が付いた演算子は、文字列式でも動作します。
MAKE は、条件式を、32 ビットの符号付整数または文字列のいずれかとして評価します。