生成文件中的命令
描述块或推理规则指定在依赖项过期时要运行的命令块。 NMAKE 在运行命令之前显示每条命令,除非使用了 /S
、.SILENT
、!CMDSWITCHES
或 @
。 如果描述块后面没有命令块,NMAKE 会查找匹配的推理规则。
一个命令块包含一个或多个命令,每个命令独占一行。 依赖项或规则与命令块之间不能出现空行。 但是,可能会出现仅包含空格或制表符的行;此行被解释为空命令,并且不会发生错误。 命令行之间允许有空行。
命令行以一个或多个空格或制表符开头。 后跟换行符的反斜杠 (\
) 被解释为命令中的空格。 在行尾使用反斜杠将命令继续到下一行。 如果反斜杠后面有任何其他字符(包括空格或制表符),NMAKE 会按字面意思解释反斜杠。
以分号 (;
) 开头的命令可以出现在依赖项行或推理规则中,无论后面是否有命令块:
project.obj : project.c project.h ; cl /c project.c
命令修饰符
你可以在命令前指定一个或多个命令修饰符,可以选择用空格或制表符分隔。 与命令一样,修饰符必须缩进。
修饰符 | 目的 |
---|---|
@ 命令 |
防止显示命令。 不会禁止按命令显示。 默认情况下,NMAKE 回显所有执行的命令。 使用 /S 可禁止显示整个生成文件;使用 .SILENT 可禁止显示部分生成文件。 |
- [number] 命令 |
关闭命令的错误检查。 默认情况下,如果命令返回非零退出代码,NMAKE 将停止。 如果使用 -number ,则 NMAKE 在退出代码超过 number 时停止。 破折号和数字之间不能出现空格或制表符。在 number 和 command 之间必须至少出现一个空格或制表符。 使用 /I 关闭整个生成文件的错误检查;使用 .IGNORE 可关闭部分生成文件的错误检查。 |
! command |
如果命令使用 $** (依赖项中的所有依赖文件)或 $? (依赖项中的所有依赖文件,其时间戳晚于目标),则为每个依赖文件执行命令。 |
文件名部分语法
命令中的文件名部分语法表示第一个依赖文件名的组件(可能是隐含的依赖)。 文件名组件是指定的文件驱动器、路径、基本名称和扩展名,而不是磁盘上存在的文件名。 使用 %s
表示完整的文件名。 使用 %|
[parts]F
(百分号后面的竖线字符)表示文件名的各个部分,其中 parts 可以是以下字母中的零个或多个(任意顺序)。
信件 | 说明 |
---|---|
无字母 | 完整名称(与 %s 相同) |
d |
驱动器 |
p |
路径 |
f |
文件基础名称 |
e |
文件扩展名 |
例如,如果文件名是 c:\prog.exe
:
%s
变为c:\prog.exe
%|F
变为c:\prog.exe
%|dF
变为c
%|pF
变为c:\
%|fF
变为prog
%|eF
变为exe