描述块或推理规则指定在依赖项过期时要运行的命令块。 NMAKE 在运行命令之前显示每条命令,除非使用了 /S .SILENT !CMDSWITCHES @ 。 如果描述块后面没有命令块,NMAKE 会查找匹配的推理规则。

一个命令块包含一个或多个命令,每个命令独占一行。 依赖项或规则与命令块之间不能出现空行。 但是,可能会出现仅包含空格或制表符的行;此行被解释为空命令,并且不会发生错误。 命令行之间允许有空行。

命令行以一个或多个空格或制表符开头。 后跟换行符的反斜杠 ( \ ) 被解释为命令中的空格。 在行尾使用反斜杠将命令继续到下一行。 如果反斜杠后面有任何其他字符(包括空格或制表符),NMAKE 会按字面意思解释反斜杠。

以分号 ( ; ) 开头的命令可以出现在依赖项行或推理规则中,无论后面是否有命令块:

project.obj : project.c project.h ; cl /c project.c

命令修饰符

你可以在命令前指定一个或多个命令修饰符,可以选择用空格或制表符分隔。 与命令一样,修饰符必须缩进。

-[number] 命令 关闭命令的错误检查。 默认情况下,如果命令返回非零退出代码,NMAKE 将停止。 如果使用 -number ,则 NMAKE 在退出代码超过 number 时停止。 破折号和数字之间不能出现空格或制表符。在 number 和 command 之间必须至少出现一个空格或制表符。 使用 /I 关闭整个生成文件的错误检查;使用 .IGNORE 可关闭部分生成文件的错误检查。 ! command 如果命令使用 $**(依赖项中的所有依赖文件)或 $?(依赖项中的所有依赖文件,其时间戳晚于目标),则为每个依赖文件执行命令。

文件名部分语法

命令中的文件名部分语法表示第一个依赖文件名的组件(可能是隐含的依赖)。 文件名组件是指定的文件驱动器、路径、基本名称和扩展名,而不是磁盘上存在的文件名。 使用 %s 表示完整的文件名。 使用 %|[parts]F (百分号后面的竖线字符)表示文件名的各个部分,其中 parts 可以是以下字母中的零个或多个(任意顺序)。