nmaker使用教程

nmaker使用教程

Nmake使用教程

一、Nmake简介

Nmake是Visual Studio的内置工具之一,与Makefile配合使用,主要负责执行Makefile中描述的编译链接步骤,但本身并不具备编译或链接功能。它类似于Linux下的GNU Make,但两者的Makefile并不通用。在大多数微软的软件和驱动开发包中都会包含Nmake工具,并且Windows CE的构建系统大量使用了Nmake工具和Makefile 。

二、Makefile基础

  • 1. 基本结构
    • Makefile包含描述块、命令、宏、推理规则和点指令等部分。
    • 描述块:由依赖项行和后面可跟的命令块组成。依赖项行指定目标以及依赖项,目标必须位于行首,用冒号(:)分隔目标和依赖项,允许使用空格或制表符。例如:project.obj : project.c project.h。如果目标不存在、目标的时间戳比依赖项早或者目标是伪目标,则Nmake执行命令。如果某依赖项是其他地方的目标,并且不存在或对于自己的依赖项已过期,则Nmake在更新当前依赖项之前更新该依赖项 。
    • 命令:Nmake在运行命令之前显示每个命令,除非使用了特定选项(如/S选项、.SILENT、!CMDSWITCHES或@)。命令块包含一个或多个命令,每个命令位于各自的命令行上。在依赖项(或规则)和命令块之间不能出现空行,命令行之间允许有空行,命令行以一个或多个空格或制表符开始。后面紧跟着换行符的反斜杠()在命令中被解释为空格,在行尾使用反斜杠可继续下一行命令;如果反斜杠后紧跟有其他任何字符(包括空格或制表符),则Nmake按原义解释反斜杠。例如:project.obj : project.c project.h ; cl /c project.c
    • :可用于创建可生成不同项目的生成文件、指定命令选项和设置环境变量等。可以定义自己的宏或使用Nmake的预定义宏 。
    • 推理规则:提供命令来更新目标并推理目标的依赖项。推理规则中的扩展名与具有相同基名称的单个目标和依赖项匹配。如果过期的依赖项没有命令,并且如果.SUFFIXES包含依赖项的扩展名,则Nmake使用其扩展名与当前或指定目录中的目标和现有文件匹配的规则。如果依赖文件不存在,并且未在另一个描述块中作为目标列出,则推理规则可以从具有相同基名称的另一个文件创建缺少的依赖项。如果描述块的目标没有依赖项或命令,推理规则可以更新目标。即使不存在描述块,推理规则也可以生成命令行目标 。
    • 点指令:在描述块之外的行首指定,以句点(.)开始,后面跟一个冒号(:),允许使用空格或制表符,点指令名区分大小写并且应为大写。例如:
      • .IGNORE:忽略从指定该指令的位置到生成文件末尾之间,由命令返回的非零退出代码。默认情况下,如果命令返回非零退出代码,Nmake将暂停。若要还原错误检查,请使用!CMDSWITCHES。若要忽略整个文件的退出代码,请使用/I选项 。
      • .PRECIOUS:如果更新目标的命令暂停,则将目标保留在磁盘上;若命令通过删除文件处理中断,则该指令无效。用一或多个空格或制表符分隔目标名称。默认情况下,如果通过使用CTRL + C或CTRL + BREAK组合键中断生成,Nmake将删除目标 。
      • .SILENT:取消从指定该指令的位置到生成文件末尾之间的已执行命令的显示。默认情况下,Nmake显示它调用的命令。若要还原回显,请使用!CMDSWITCHES。若要取消单个命令的回显,请使用@修饰符 。
      • .SUFFIXES:列出推理规则匹配的扩展名,预定义为:.exe、.obj、.asm、.c、.cpp、.cxx、.bas、.cbl、.for、.pas、.res、.rc。若要更改.SUFFIXES列表顺序或指定新列表,请清除此列表并指定新的设置。若要清除此列表,请不要在冒号后指定扩展名:。若要查看.SUFFIXES的当前设置,请运行选项为/P的Nmake 。
  • 2. 示例 ```makefile

宏定义

这里是一个简单的Makefile示例

定义目标和依赖关系

hello.exe : hello.obj cl.exe /MD /Fehello.exe hello.obj

假设hello.obj的生成依赖于hello.c

hello.obj : hello.c cl.exe /c hello.c ```

三、Nmake的使用

  • 1. 指定Makefile
    • Nmake使用指定/F选项的Makefile(生成文件,通常名字是makefile);如果未指定/F选项,则使用当前目录下的Makefile。如果未指定Makefile,则Nmake使用推理规则生成命令行targets 。
  • 2. 执行特定步骤(以编译为例)
    • 如果仅仅只想执行其中的某一步比如说编译,那么可以直接打入nmake /xmakefile_newa.obj(这里的a.obj是目标文件,对应(目标文件:依赖文件\t命令)中的目标文件那对应的东西) 。
  • 3. 安装后的简单配置(以Visual Studio为例)
    • 安装完Visual Studio之后,需要进行简单配置才能使用Nmake。进入存放源文件(如tt.c)和Makefile.mak文件所在的目录下,运行nmake /fmakefile.mak看是否编译出错,如果错误查找原因并修错误,再编译,直到没有错误。然后可以直接在命令行中输入生成的可执行文件(如tt)查看输出 。
本篇文章所含信息均从网络公开资源搜集整理,旨在为读者提供参考。尽管我们在编辑过程中力求信息的准确性和完整性,但无法对所有内容的时效性、真实性及全面性做出绝对保证。读者在阅读和使用这些信息时,应自行评估其适用性,并承担可能由此产生的风险。本网站/作者不对因信息使用不当或误解而造成的任何损失或损害承担责任。
阅读全文