特殊な NMAKE マクロ

NMAKE は,各種のファイル名とコマンドを表現するいくつかの特殊なマクロを用意しています。これらマクロの用途の 1 つは,既定の推論規則での使用です。他のマクロと同様に,NMAKE が提供するマクロでは大文字小文字が区別されます。

この節では,以下のことについて説明します。

ファイル名マクロ

ファイル名マクロは,依存関係で指定されるファイル名として事前に定義されています (ディスク上の完全なファイル名指定ではありません)。これらのマクロは,呼び出すときに括弧で囲む必要はありません。次表に示すように,$ だけを指定します。

マクロ 意味
$@ 現在のターゲットの現在指定されている完全な名前 (パス,基本名,拡張子)。
$$@ 現在のターゲットの現在指定されている完全な名前 (パス,基本名,拡張子)。依存関係の依存ファイルとしてのみ使用できます。
$* 現在のターゲットのパスと基本名。ファイル拡張子を省略したもの。
$** 現在のターゲットの全依存ファイル。
$? 現在のターゲットよりも新しいタイムスタンプを持つすべての依存ファイル。
$< 現在のターゲットよりも新しいタイムスタンプを持つ依存ファイル。推論規則の中のコマンドでのみ使用できます。

既定のファイル名マクロの一部を指定するには,マクロ修飾子 (次表を参照) を追加し,修飾したマクロを括弧で囲みます。

修飾子 結果として得られるファイル名部分
D ドライブとディレクトリ
B 基本名
F 基本名と拡張子
R ドライブとディレクトリと基本名

再帰マクロ

再帰マクロを使うと,NMAKE を再帰的に呼び出すことができます。再帰セッションはコマンド行と環境変数のマクロを継承します。ただし,メイクファイルで定義された推論規則や .SUFFIXES.PRECIOUS の指定は継承しません。再帰的な NMAKE セッションにマクロを渡すには,再帰呼び出しの前に SET コマンドで環境変数を設定するか,再帰呼び出しのコマンドの中でマクロを定義します。次表に再帰マクロを示します。

マクロ 定義
MAKE もともと NMAKE の呼び出しに使用されたコマンド。
MAKEDIR NMAKE が呼び出されたときの現在のディレクトリ。
MAKEFLAGS 現在有効なオプション。/$(MAKEFLAGS) のように使用します。

コマンド・マクロとオプション・マクロ

コマンド・マクロは Microsoft 製品用に事前に定義されています。オプション・マクロは,これらの製品へのオプションを表し,基本設定では定義されていません。どちらも既定の推論規則で使用されるもので,記述ブロックまたはユーザー定義の推論規則で使用することができます。コマンド・マクロは,オプションを含めて,コマンド行の一部または全体を表現するように再定義することができます。オプション・マクロは,未定義のままであればヌル文字列を生成します。次表は,コマンド・マクロとオプション・マクロを示しています。

Microsoft 製品 コマンド・マクロ 定義 オプション・マクロ
Macro アセンブラ AS ml AFLAGS
Basic コンパイラ BC bc BFLAGS
C コンパイラ CC cl CFLAGS
COBOL コンパイラ COBOL Cobol COBFLAGS
C++ コンパイラ CPP cl CPPFLAGS
C++ コンパイラ CXX cl CXXFLAGS
Compaq Visual Fortran コンパイラ FOR df FFLAGS
Pascal コンパイラ PASCAL pl PFLAGS
リソース・コンパイラ RC rc RFLAGS

環境変数マクロ

NMAKE は,セッションの開始前に存在していた環境変数のマクロ定義を継承します。オペレーティング・システムで設定されていた環境変数は,NMAKE マクロとして使用することができます。/E オプションを使うと,環境変数から継承されたマクロで,メイクファイル中の同じ名前のマクロを置換することができます。

環境変数マクロはセッション中で再定義することができ,これによって対応する環境変数が変更されます。また,SET コマンドを使っても環境変数を変更することができます。ただし,SET コマンドを使ってセッション内で環境変数を変更しても,対応するマクロは変更されません。

次に例を示します。

	PATH=$(PATH);\nonesuch

	all:
		echo %PATH%

この例では,PATH を変更したことによって,対応する環境変数 PATH が変更されます。ここではパスに \nonesuch が追加されます。

環境変数が,メイクファイル中では文法的に不正な文字列として定義されている場合,マクロは作成されず,警告も生成されません。変数の値がドル記号 ($) を含んでいると,NMAKE はそれをマクロ呼び出しの先頭として解釈します。マクロを使用すると予期しない動作が起こることがあります。