NMAKE参考之二——运行NMAKE

运行NMAKE

你可以使用下面的语法运行NMAKE:

NMAKE [options] [macros] [targets]

  • option字段列出NMAKE选项,NMAKE选项会在本文的“命令行选项”部分进行详细介绍。
  • micros字段列出宏定义,它允许你定义字符串并在makefile中使用,后文“用户自定义宏”会有详细描述。
  • targets列出需要生成的目标文件。NMAKE会生成命令行参数中目标字段的目标文件。如果你没有指定任何目标,NMAKE默认生成makefile文件中第一个依赖的第一个目标。(你可以使用伪目标让NMAKE来生成多个目标文件。详细请参阅后文”伪目标“一节。)

NMAKE使用如下优先级去管理编译过程。

  1. 如果使用了/F选项,NMAKE于当前目录或指定目录搜索指定的makefile文件,如果makefile文件不存在,那么NMAKE暂停并显示错误信息。
  2. 如果没有使用/F选项,NMAKE于当前目录搜索一个名叫MAKEFILE的文件作为makefile文件。
  3. 如果在当前目录并不存在名为MAKEFILE的文件,NMAKE检查命令行中的目标文件并尝试使用(预定义的或是定义在TOOLS.INI文件中的)推导规则去生成目标文件。这一特性使得无须makefile,NMAKE也能依靠合适的目标推导规则完成编译。
  4. 如果没有找到makefile文件、命令行参数中也没有指定目标,那么NMAKE会暂停并显示错误信息。

示例

下面这条命令指定了/S选项和一个宏定义(”program=sample"),让NMAKE生成两个目标文件(sort.exe和search.exe)。该命令并使用makefile,所以NMAKE在当前目录查找MAKEFILE文件或是使用默认推导规则。NMAKE /S "program=sample" sort.exe search.exe

NMAKE 选项

下表描述了NMAKE选项。选项前有斜杠 (/) 或短划线 (-),并且不区分大小写。使用!CMDSWITCHES更改生成文件或Tools.ini中的选项设置。

/A

强制生成所有已评估的目标,即使这些目标相对于依赖项未过期。不强制不相关目标的生成。

/B

即使时间戳相等,也强制生成。建议只用于非常快的系统(解析为两秒或小于两秒)。

/C

取消默认输出,包括非致命的 NMAKE 错误或警告、时间戳以及 NMAKE 版权信息。取消 /K 选项发出的警告。

/D

当目标不存在时,显示每个已评估的目标、依赖项和消息的时间戳。与 /P 选项一起用于调试生成文件。使用 !CMDSWITCHES 设置或清除部分生成文件的 /D 选项。

/E

使环境变量重写生成文件宏定义。

/ERRORREPORT[NONE | PROMPT | QUEUE | SEND ]

如果 nmake.exe 在运行时失败,则可以使用 /ERRORREPORT 将有关这些内部错误的信息发送给 Microsoft。有关 /ERRORREPORT 的更多信息,请参见/errorReport(报告内部编译器错误)。

/F filename

将 filename 指定为生成文件。空格或制表符可以位于 filename 的前面。为每个生成文件指定一次 /F 选项。若要从标准输入提供生成文件,请为 filename 指定短划线 (-),并按 F6 或 Ctrl+Z 结束键盘输入。

/G

显示 !INCLUDE 指令中包含的生成文件。有关更多信息,请参见生成文件预处理指令。

/HELP, /?

显示 NMAKE 命令行语法的简短摘要。

/I

忽略所有命令的退出代码。若要设置或清除部分生成文件的 /I 选项,请使用 !CMDSWITCHES。若要忽略部分生成文件的退出代码,请使用短划线 (-) 命令修饰符或 .IGNORE。如果两者都指定了,则重写 /K 选项。

/K

如果命令返回错误,则继续生成不相关的依赖项。同时发出警告并返回退出代码 1。默认情况下,如果有任一命令返回非零退出代码,NMAKE 将暂停。来自 /K 选项的警告被 /C 选项取消;如果两者都指定了,则 /I 选项重写 /K 选项。

/N

显示但不执行命令;执行预处理命令。不在递归 NMAKE 调用中显示命令。对于调试生成文件和检查时间戳很有用。若要设置或清除部分生成文件的 /N 选项,请使用 !CMDSWITCHES。

/NOLOGO

取消 NMAKE 版权消息。

/P

显示标准输出的信息(宏定义、推理规则、目标、.SUFFIXES 列表),然后运行生成。如果不存在任何生成文件和命令行目标,则只显示信息。与 /D 选项一起用于调试生成文件。

/Q

检查目标的时间戳;不运行生成。如果所有目标都是最新的,则返回零退出代码;如果有任何目标不是最新的,则返回非零退出代码。执行预处理命令。从批处理文件运行 NMAKE 时很有用。

/R

清除 .SUFFIXES 列表并忽略在 Tools.ini 文件中定义的,或预定义的推理规则和宏。

/S

取消已执行命令的显示。若要取消部分生成文件中的显示,请使用 @ 命令修饰符或 .SILENT。若要设置或清除部分生成文件的 /S 选项,请使用 !CMDSWITCHES。

/T

更新命令行目标(或第一个生成文件目标)的时间戳并执行预处理命令,但不运行生成。

/U

必须与 /N 选项一起使用。转储内联 NMAKE 文件,以便 /N 输出可用作批处理文件。

/X filename

将 NMAKE 错误输出发送到 filename 而不是标准错误。空格或制表符可以位于 filename 的前面。若要将错误输出发送到标准输出,请为 filename 指定短划线 (-)。不影响从命令到标准错误的输出。

/Y

禁用批模式推理规则。选定该选项后,所有批模式推理规则被视为常规推理规则。

示例

下面的命令行指定了两个NMAKE选择项:NMAKE /F sample.mak /c targ1 targ2

  • /F选择项告诉NMAKE去读取sample.mak文件
  • /C选择项告诉NMAKE不要打印非致命的错误和警告信息。
  • 该命令指定了两个目标文件。

NMAKE 命令文件

您可以将一组命令行参数保存在一个文本文件中,并将该文件名作为参数传递给NMAKE。NMAKE打开命令文件,读取文件中的命令作为命令行参数。你可以使用命令文件的方式绕开操作系统对于命令行参数长度的限制(MS-DOS中是128个字符)。

要想使用命令文件作为NMAKE的参数输入,只需输入:

NMAKE @commandfilecommandfile是命令文件的文件名,命令文件中包括NMAKE的命令行参数的信息。在输入命令时在命令文件名之前加个@字符。当然,你也可以使用完整的文件路径。

NMAKE将命令文件当成是单独的一个参数来处理。它把命令文件换行符替换成空格。宏定义中若有包含空格的须写在一对双引号中,详情请查阅后文中“如何定义宏定义”。

可以将@commandfile放置于命令行中任意位置。其他参数可以放在命令文件之前或是之后。当然,可以指定多个命令文件。

示例1

如果一个名为UPDATE的文件中包含这么一行内容:/S "program=sample" sort.exe search.exe

你可如下方式执行NMAKE程序:NMAKE @update

上面语句的作用就相当于在命令行中输入如下的命令:NMAKE /S "program=sample" sort.exe search.exe

示例2

下面将update文件修改为:

/S "program \
= samplet" sort.exe search.exe

使用(\)可以将上面的定义写在两行中。

示例3

如果命令文件update的内容如下:

/S "program=sample" sort.exe

您可使用按下面的方式启动NMAKE来生成目标search.exe:

NMAKE @update search.exe

TOOLS.INI配置文件

你可以通过在编辑初始化文件TOOLS.INI来订制你的NMAKE。NMAKE的设置必须以标签[NMAKE]开始。该标签不区分大小写。标签段内的文件内容可以包括任何makefile信息。NMAKE将会在其运行的每个会话过程使用INI中的设置,除非你在NMAKE中使用/R选项。NMAKE首先在当前目录搜索TOOLS.INI文件,其次在环境变量INIT指定的路径中进行搜索。

你可以TOOLS.INI文件中使用!CMDSWITCHES指令来指定命令行选项。就像环境变量一样,采用这种方式设置的命令行选项将会在每个NMAKE的会话期间都会起作用。

在TOOLS.INI中出现的宏定义和推导规则可以被覆盖。详情请查阅后文的“宏定义的优先性”一节和“推导规则的优先性”章节。

NMAKE会在其读取makefile文件之前处理TOOLS.INI文件在的内容。例如,在TOOLS.INI出现的描述块将会被作为makefile的第一个出现的描述块来处理,这同样适用于NMAKE的每个会话过程,除非/R选项被指定。

TOOLS.INI文件中的注释总是以“;”开始,“;”后面的内容将会被作为注释。当然您也可以使用makefile文件中注释的方式,也就是以"#"作为一行的开始。

TOOLS.INI例子

下面是一个TOOLS.INI的例子:

[NMAKE]
; macros
AS = masm
AFLAGS = /FR /LA /ML /MX /W2
; inference rule
.asm.obj:
$(AS) /ZD ZI $(AFLAGS) $.asm

NMAKE读取并使用[NMAKE]标签以下的内容。在本例中,重新定义了AS宏来关联微软的宏汇编器功能(MASM.EXE);重新定义了AFLAGS宏,并重新定义了由.asm源文件到.obj文件的推导规则。这些NMAKE的功能将会在后文中有详细的介绍。

你可能感兴趣的:(Windows)