メイクファイルのプリプロセス

プリプロセス ディレクティブと式を使用して、NMAKE セッションを制御できます。 前処理命令は、メイクファイルまたは Tools.ini に挿入できます。 ディレクティブを使用すると、条件付きでのメイクファイルの処理、エラー メッセージの表示、他のメイクファイルの組み込み、マクロの定義の解除、特定のオプションのオンとオフの切り替えを行うことができます。

メイクファイルのプリプロセス ディレクティブ

プリプロセス ディレクティブでは、大文字と小文字は区別されません。 最初の感嘆符 (!) は、行の先頭に配置する必要があります。 インデントを設定するために、感嘆符の後に 0 個以上のスペースまたはタブを配置できます。

  • !CMDSWITCHES { +option | -option } ...

    一覧表示されている各 option のオンとオフを切り替えます。 スペースまたはタブは、+ または - 演算子の前に配置する必要があります。 演算子とオプション文字の間にはスペースを使用できません。 文字では大文字と小文字は区別されず、スラッシュ (/) を使用せずに指定します。 一部のオプションを有効にし、それ以外をオフにする場合は、!CMDSWITCHES の別個の指定を使用します。

    メイクファイルでは /D/I/N/S のみを使用できます。 Tools.ini では、/F/HELP/NOLOGO/X/? を除くすべてのオプションが許可されます。 記述ブロックで指定された変更は、次の記述ブロックまで有効になりません。 このディレクティブでは MAKEFLAGS を更新します。MAKEFLAGS が指定されている場合、変更は再帰中に継承されます。

  • !ERRORtext

    エラー U1050 の text を表示してから、/K/I.IGNORE!CMDSWITCHES、またはダッシュ (-) コマンド修飾子が使用されている場合でも、NMAKE を停止します。 text の前のスペースやタブは無視されます。

  • !MESSAGEtext

    text を標準出力に表示します。 text の前のスペースやタブは無視されます。

  • !INCLUDE [ < ] filename [ > ]

    filename をメイクファイルとして読み取り、現在のメイクファイルを続行します。 NMAKE では、まず指定されたディレクトリまたは現在のディレクトリで filename を検索してから、親メイクファイルのディレクトリで再帰的に検索します。次に、filename が山かっこ (< >) で囲まれている場合は、最初に INCLUDE 環境変数に設定される、INCLUDE マクロによって指定されたディレクトリ内を検索します。 .SUFFIXES 設定、.PRECIOUS、推論規則を再帰的なメイクファイルに渡す場合に便利です。

  • !IFconstant_expression

    constant_expression がゼロ以外の値に評価される場合は、!IF と次の !ELSE または !ENDIF の間のステートメントを処理します。

  • !IFDEFmacro_name

    macro_name が定義されている場合は、!IFDEF と次の !ELSE または !ENDIF の間のステートメントを処理します。 null マクロは定義されていると見なされます。

  • !IFNDEFmacro_name

    macro_name が定義されていない場合は、!IFNDEF と次の !ELSE または !ENDIF の間のステートメントを処理します。

  • !ELSE [ IFconstant_expression | IFDEFmacro_name | IFNDEFmacro_name ]

    前の !IF!IFDEF、または !IFNDEF ステートメントがゼロに評価される場合は、!ELSE と次の !ENDIF の間のステートメントを処理します。 省略可能なキーワードを使用すると、プリプロセスをさらに制御できます。

  • !ELSEIF

    !ELSE IF と同義。

  • !ELSEIFDEF

    !ELSE IFDEF と同義。

  • !ELSEIFNDEF

    !ELSE IFNDEF と同義。

  • !ENDIF

    !IF!IFDEF、または !IFNDEF ブロックの終了をマークします。 同じ行の !ENDIF の後のテキストは無視されます。

  • !UNDEFmacro_name

    macro_name の定義を解除します。

メイクファイル プリプロセスの式

!IF または !ELSE IFconstant_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

関連項目

NMAKE リファレンス