メイクファイルのプリプロセス
プリプロセス ディレクティブと式を使用して、NMAKE セッションを制御できます。 前処理命令は、メイクファイルまたは Tools.ini
に挿入できます。 ディレクティブを使用すると、条件付きでのメイクファイルの処理、エラー メッセージの表示、他のメイクファイルの組み込み、マクロの定義の解除、特定のオプションのオンとオフの切り替えを行うことができます。
メイクファイルのプリプロセス ディレクティブ
プリプロセス ディレクティブでは、大文字と小文字は区別されません。 最初の感嘆符 (!
) は、行の先頭に配置する必要があります。 インデントを設定するために、感嘆符の後に 0 個以上のスペースまたはタブを配置できます。
!CMDSWITCHES
{+
option |-
option } ...一覧表示されている各 option のオンとオフを切り替えます。 スペースまたはタブは、
+
または-
演算子の前に配置する必要があります。 演算子とオプション文字の間にはスペースを使用できません。 文字では大文字と小文字は区別されず、スラッシュ (/
) を使用せずに指定します。 一部のオプションを有効にし、それ以外をオフにする場合は、!CMDSWITCHES
の別個の指定を使用します。メイクファイルでは
/D
、/I
、/N
、/S
のみを使用できます。Tools.ini
では、/F
、/HELP
、/NOLOGO
、/X
、/?
を除くすべてのオプションが許可されます。 記述ブロックで指定された変更は、次の記述ブロックまで有効になりません。 このディレクティブではMAKEFLAGS
を更新します。MAKEFLAGS
が指定されている場合、変更は再帰中に継承されます。!ERROR
textエラー U1050 の text を表示してから、
/K
、/I
、.IGNORE
、!CMDSWITCHES
、またはダッシュ (-
) コマンド修飾子が使用されている場合でも、NMAKE を停止します。 text の前のスペースやタブは無視されます。!MESSAGE
texttext を標準出力に表示します。 text の前のスペースやタブは無視されます。
!INCLUDE
[<
] filename [>
]filename をメイクファイルとして読み取り、現在のメイクファイルを続行します。 NMAKE では、まず指定されたディレクトリまたは現在のディレクトリで filename を検索してから、親メイクファイルのディレクトリで再帰的に検索します。次に、filename が山かっこ (
< >
) で囲まれている場合は、最初にINCLUDE
環境変数に設定される、INCLUDE
マクロによって指定されたディレクトリ内を検索します。.SUFFIXES
設定、.PRECIOUS
、推論規則を再帰的なメイクファイルに渡す場合に便利です。!IF
constant_expressionconstant_expression がゼロ以外の値に評価される場合は、
!IF
と次の!ELSE
または!ENDIF
の間のステートメントを処理します。!IFDEF
macro_namemacro_name が定義されている場合は、
!IFDEF
と次の!ELSE
または!ENDIF
の間のステートメントを処理します。 null マクロは定義されていると見なされます。!IFNDEF
macro_namemacro_name が定義されていない場合は、
!IFNDEF
と次の!ELSE
または!ENDIF
の間のステートメントを処理します。!ELSE
[IF
constant_expression |IFDEF
macro_name |IFNDEF
macro_name ]前の
!IF
、!IFDEF
、または!IFNDEF
ステートメントがゼロに評価される場合は、!ELSE
と次の!ENDIF
の間のステートメントを処理します。 省略可能なキーワードを使用すると、プリプロセスをさらに制御できます。!ELSEIF
!ELSE IF
と同義。!ELSEIFDEF
!ELSE IFDEF
と同義。!ELSEIFNDEF
!ELSE IFNDEF
と同義。!ENDIF
!IF
、!IFDEF
、または!IFNDEF
ブロックの終了をマークします。 同じ行の!ENDIF
の後のテキストは無視されます。!UNDEF
macro_namemacro_name の定義を解除します。
メイクファイル プリプロセスの式
!IF
または!ELSE IF
constant_expressionは、整数定数 (10 進数または C 言語表記)、文字列定数、またはコマンドで構成されます。 式をグループ化するには、かっこを使用します。 式では、C スタイルの符号付き長整数の算術演算を使用します。数値は、32 ビットの 2 の補数形式で、範囲は -2147483648 から 2147483647 までです。
式では、定数値、コマンドからの終了コード、文字列、マクロ、ファイル システムのパスに作用する演算子を使用できます。
メイクファイルのプリプロセッサ演算子
メイクファイルのプリプロセス式では、定数値、コマンドからの終了コード、文字列、マクロ、およびファイル システムのパスに作用する演算子を使用できます。 式を評価するために、プリプロセッサでは最初にマクロを展開し、次にコマンドを実行してから、演算を実行します。 演算は、かっこ内の明示的なグループ化の順序に従って評価され、その後、演算子の優先順位の順に評価されます。 結果は定数値です。
DEFINED
演算子は、マクロ名に作用する論理演算子です。 代入値がなくても、macro_name が定義されている場合、式 DEFINED( macro_name )
は true です。 DEFINED
と !IF
または !ELSE IF
を組み合わせると、!IFDEF
または !ELSE IFDEF
と等しくなります。 ただし、これらのディレクティブとは異なり、DEFINED
は複合式で使用できます。
EXIST
演算子は、ファイル システムのパスに作用する論理演算子です。 EXIST( path )
は、path が存在する場合 true です。 EXIST
の結果は、二項式で使用できます。 path に空白が含まれている場合は、二重引用符で囲みます。
2 つの文字列を比較するには、等値 (==
) 演算子または非等値 (!=
) 演算子を使用します。 文字列は二重引用符で囲みます。
整数定数では、算術否定 (-
)、1 の補数 (~
)、論理否定 (!
) の単項演算子を使用できます。
式では、次の演算子を使用できます。 同じ優先順位の演算子はグループ化し、グループは優先順位の高い順に示しています。 単項演算子は、右側のオペランドと結合します。 同じ優先順位の二項演算子は、左から右へオペランドを結合します。
Operator | 説明 |
---|---|
DEFINED( macro_name ) |
macro_name の現在の定義状態についての論理値を生成します。 |
EXIST( path ) |
path でのファイルの存在についての論理値を生成します。 |
! |
単項論理 NOT。 |
~ |
単項 1 の補数。 |
- |
単項否定。 |
* |
乗算。 |
/ |
除算。 |
% |
剰余 (余り)。 |
+ |
加算。 |
- |
減算。 |
<< |
ビットごとのシフト (左)。 |
>> |
ビットごとのシフト (右)。 |
<= |
以下。 |
>= |
以上。 |
< |
より小さい。 |
> |
より大きい。 |
== |
等値。 |
!= |
非等値。 |
& |
ビットごとの AND。 |
^ |
ビット演算子 XOR。 |
| |
ビット演算子 OR。 |
&& |
論理 AND。 |
|| |
論理 OR。 |
Note
ビットごとの XOR 演算子 (^
) はエスケープ文字と同じであり、式で使用する場合は (^^
として) エスケープする必要があります。
プリプロセスでのプログラムの実行
プリプロセス時にコマンドの終了コードを使用するには、任意の引数を指定してコマンドを角かっこ ([ ]
) 内に指定します。 コマンドを実行する前に、すべてのマクロが展開されます。 NMAKE によって、コマンドの指定がコマンドの終了コードに置き換えられます。これは、プリプロセスを制御するために式で使用できます。
例
!IF [my_command.exe arg1 arg2] != 0
!MESSAGE my_command.exe failed!
!ENDIF