特殊 NMAKE 宏

NMAKE 提供多个特殊宏来表示各种文件名和命令。 其中一些宏的一种用途是在预定义的推理规则中。 与所有宏一样,NMAKE 提供的宏区分大小写。

文件名宏

文件名宏被预定义为依赖项中指定的文件名(不是磁盘上的完整文件名规范)。 这些宏在调用时不需要 enclosed(括在)括号中;如图所示,仅指定一个 $

含义
$@ 当前指定的当前目标的全名(路径、基本名称、扩展名)。
$$@ 当前指定的当前目标的全名(路径、基本名称、扩展名)。 仅作为依赖项中的依赖项有效。
$* 当前目标的路径和基本名称减去文件扩展名。
$** 当前目标的所有依赖项。
$? 时间戳晚于当前目标的所有依赖项。
$< 时间戳晚于当前目标的依赖文件。 仅在推理规则中的命令中有效。

要指定预定义文件名宏的工件,请附加宏修饰符并将修改后的宏 enclose(括在)括号中。

修饰符 生成的文件名部分
D 驱动器加目录
B 基名称
F 基名称加扩展名
R 驱动器加目录加基本名

递归宏

使用递归宏以递归方式调用 NMAKE。 递归会话继承命令行和环境变量宏以及 Tools.ini 信息。 它们不会继承生成文件定义的推理规则或 .SUFFIXES.PRECIOUS 规范。 有三种方法可以将宏传递给递归 NMAKE 会话:

  • 在递归调用之前使用 SET 命令设置环境变量。
  • 在命令中为递归调用定义宏。
  • 或者,在 Tools.ini 中定义一个宏。
定义
MAKE 最初用于调用 NMAKE 的命令。

$(MAKE) 提供了 nmake.exe 的完整路径。
MAKEDIR 调用 NMAKE 时的当前目录。
MAKEFLAGS 当前生效的选项。 用作 /$(MAKEFLAGS)。 不 included(含)/F 选项。

命令宏和选项宏

命令宏是为 Microsoft 产品预定义的。 选项宏表示这些产品的选项,默认情况下未定义。 两者都在预定义的推理规则中使用,并且可以在描述块或用户定义的推理规则中使用。 可以重新定义命令宏以表示工件或所有命令行,including(包括)选项。 选项宏在未定义的情况下生成 null 字符串。

工具 命令宏 定义为 选项宏
宏装配器 AS mlml64 AFLAGS
C 编译器 CC cl CFLAGS
C++ 编译器 CPP cl CPPFLAGS
C++ 编译器 CXX cl CXXFLAGS
Resource资源编译器 RC rc RFLAGS

环境变量宏

NMAKE 继承会话开始时存在的环境变量的宏定义。 如果在操作系统环境中设置了变量,则它可用作 NMAKE 宏。 继承的名称将转换为uppercase(大写)。 在预处理之前发生继承。 使用 /E 选项会导致从环境变量继承的宏替代生成文件中具有相同名称的任何宏。

环境变量宏可以在会话中重新定义,这会改变相应的环境变量。 还可以使用 SET 命令更改环境变量。 但是,使用 SET 命令更改会话中的环境变量不会更改相应的宏。

例如:

PATH=$(PATH);\nonesuch

all:
    echo %%PATH%%

在本例中,更改 PATH 会更改相应的环境变量 PATH;这会将 \nonesuch 附加到你的路径中。

如果环境变量定义为在生成文件中语法上不正确的字符串,则不会创建宏,也不会生成警告。 如果变量的值包含美元符号 ($),NMAKE 将其解释为宏调用的开始。 使用宏可能会导致意外行为。

另请参阅

宏和 NMAKE