使用NMAKE管理工程
本章描述了微软程序维护实用工具(NMAKE)版本1.20.NMAKE是一个精巧的命令处理器,它节约了时间并且简化了工程管理。一旦你指出哪些工程文件依赖于其他文件,NMAKE会自动创建工程,而不用去重新编译在本次创建过程中将不会改变的文件。(原文为:自从上次创建之后没有改变的文件)
如果您正在使用程序员工作台(PWB)创建您的工程,PWB自动地创建一个makefile并且呼叫NMAKE命令去执行这个文件.如果您想要脱离程序员工作台(PWB)建立您的程序(program),如果您想要理解或者修改一个用PWB创建的Makefile, 可能会打算来阅读本章。
NMAKE能够将自己转换为扩展内存(数量),附加内存(空间)(expanded extended有什么区别?)或者磁盘去为它所产生的大量命令保留空间。(想得到更多的信息,看第531页对/M选项的描述。)
新的特性
NMAKE 版本1.20提供了如下新的特性,想得到每个特性的详细信息,请看本章的相关部分。
1.新的选项:/B,/K,/M,/V
2.!MESSAGE指令
3.两个预编译操作符:DEFINED,EXIST
4.三个和!ELSE一起使用的指令:IF,IFDEF,IFNDEF
5.新的指令:!ELSEIF,!ELSEIFDEF,!ELSEIFNDEF
6.添加.CPP和.CXX到.SUFFIXES表中。
7.为C++程序预定义的宏:CPP,CXX,CPPFLAGS,CXXFLAGS
8.为C++程序预定义的推理规则。
基本思想
译者补充:如果在创建了目标文件,在“盖时间戳”之后(包括之时),依赖文件进行了改变,那么就必须重新生成目标文件。(不能保证是最新的,但是可以保证是最多延迟-两-秒)所谓的2-second interval.(因此在NMAKE的时候,最好是不要去保存任何工程文件)
如果每次都重新编译,当然不会有2-second interval.
因为从生成文件到为文件盖时间戳,有一个过程。这个过程就是所谓的 2-second interval。在这个过程中,程序员有可能去更改文件。而每次所有文件重新编译的话,跟时间戳没关系。
概述
NMAKE通过检查文件的时间戳来工作。一个时间戳是文件最后修改的日期和时间。时间戳被大部分操作系统在2秒间隔中创建。NMAKE比较目标文件的时间戳和依赖文件的时间戳。一个目标通常是一个您想要创建的文件,例如:可执行文件,虽然它可能也是一个您要执行的一组命令的标记。一个依赖通常是一个文件,从这个文件可以创造出一个目标,例如一个源文件。一个目标是“过期的”,如果它的任何依赖有一个比自己更晚的时间戳,或者如果这个目标根本不存在。(注:相当于时间戳无限早)(想知道关于2-second intrerval如何影响您的创建,看第530页的对/B选项的描述)
==================================================
警告:为了使NMAKE正常工作,您计算机的日期和时间必须是和以前的设置相对一致的。如果您每一次启动系统都设置日期和时间,注意精确地设置它。如果您的系统存储了一个设置,那么确保电池正常工作。
==================================================
当您运行NMAKE的时候,它读取一个您提供的"makefile",一个makefile(有时候叫做一个description file)是一个包括一组操作指示的文件。NMAKE利用这组操作指示来创建您的工程。操作指示由描述块,宏,指导性指令(directives),和推理规则组成。每一个描述块通常列出一个目标(或几个目标),目标的依赖,创建目标的命令。NMAKE比较目标文件的时间戳和依赖文件的时间戳,如果目标文件的时间戳比依赖文件的早或者相同,你nmake通过执行在描述块中的命令来更新目标文件
没有makefile运行NMAKE也是可能的。在这种情况下,NMAKE将利用预定义的宏和推理规则以及在命令行列出或者在TOOLS.INI文件中列出的操作指示。(更多的关于TOOLS.INI文件的信息,看第534页)
NMAKE的主要目的是帮助您更快和更容易地建立工程。尽管如此,它也不局限于编译和链接,NMAKE可以运行其他类型的程序并且可以执行操作系统指令。您可以利用NMAKE来备份,移动文件,和执行通常在操作系统提示符下执行的别的工程管理任务。
本章利用术语“build”,就像在建立一个目标。意味着,计算目标时间戳和依赖时间戳,如果目标过期,执行和目标相关的命令。术语“build”有自己的意义,不管它是否真实地创建或者改变目标文件。
运行 NMAKE
利用如下语法调用NMAKE
NMAKE [[options]] [[macros]] [[targets]]
options域列举了NMAKE的选项,在下面的“命令行选项”部分描述。
macros域描述了宏的定义,允许您改变makefile中的内容。对宏的语法描述在551页的“用户定义宏”中描述。
targets域描述了要创建的目标。NMAKE只创建列举在命令行中的目标。如果您不指定目标,NMAKE只创建makefile中第一个依赖关系中的目标。(您可以利用伪目标来告诉NMAKE去创建多于一个的目标。参照第540页 “伪目标”)
NMAKE利用如下的优先级去决定如何指导“创建”:
1。如果利用/F选项,NMAKE搜索当前的或者指定的目录去寻找指定的makefile。如果文件不存在,NMAKE终止执行并展现出一个错误信息。
2. 如果不使用/F选项,你nmake搜寻当前目录中名为makefile的文件。
3. 如果makefile不存在,nmake核对和目标文件相关的命令行内容,并试图利用推理规则(在TOOLS.INI中或者预定义)创建他们。 这个特性允许您在没有makefile的情况下利用nmake,只要nmake拥有该目标的推理规则。
4. 如果没有使用makefile,并且命令行也没有指示目标,nmake停止并展现出错误信息。
例子:
下面的命令给出了一个选项/s和一个宏(“program=sample”)并且告诉nmake去创建两个目标(sort.exe,search.exe)。这个命令没有给出makefile,因此nmake找寻makefile或者利用预定义的推理规则。
NMAKE /S "program=sample" sort.exe search.exe
关于NMAKE宏的信息,看第550页。
命令行选项:
NMAKE 接受一些控制NMAKE会话的选项。选项不区分大小写,并且可以前面可以是slash(/)或者或者dash(-)。(斜砍?和冲锋?)
/A
强制NMAKE创建被计算时间戳的目标,尽管目标根据他们的依赖没有过期。这个选项不强制NMAKE去创建不相关的目标。
/B
告诉NMAKE去执行一个依赖,尽管时间戳是相等的。大部分的操作系统分配时间戳是2秒间隔。计算机可能会认为一个文件过期了,而实际上不是。这个选项可能会倒是不必要的创建步骤,但是即使在很快的机器上使用nmake的时候,还是建议您使用这个选项。(莫非是为了保险?防止真的过期?)
分享到:
相关推荐
这个文件随后将用于生成包括集成开发环境在内的本地开发工具(例如Microsoft Visual Studio , Apple’s Xcode ,Unix Linux,Nmake,Borlandstyle Makefiles)的工程文件。CMake允许用户通过简单的裁剪构建出复杂的硬件...
3.3.1 使用nmake.exe构建工程 48 3.3.2 Makefile实例 50 3.3.3 注释 50 3.3.4 宏 50 3.3.5 描述块:目标、依赖项和命令 53 3.3.6 makefile预处理 55 3.3.7 在Platform SDK的基础上使用nmake 56 3.4 ...
3.3.1 使用nmake.exe构建工程 48 3.3.2 Makefile实例 50 3.3.3 注释 50 3.3.4 宏 50 3.3.5 描述块:目标、依赖项和命令 53 3.3.6 makefile预处理 55 3.3.7 在Platform SDK的基础上使用nmake 56 3.4 ...
LIB.EXE 子程序库管理文件 如果采用集成开发环境PWB,主要涉及如下文件: PWWB.EXE 程序员工作平台 NMAKER.EXE 工程维护程序 NMAKE.EXE nmaker的MS-DOS扩展驱动程序 CV.EXE 源代码调试器CodeView CVPACK.EXE ...
3.2.2 nmake工具 3.2.3 build工具 3.2.4 makefile文件 3.2.5 dirs文件 3.2.6 sources文件 3.2.7 makefile.inc文件 3.2.8 build工具的环境变量 3.2.9 build工具的命令行参数 3.3 用VC编译...
3.2.2 nmake工具 3.2.3 build工具 3.2.4 makefile文件 3.2.5 dirs文件 3.2.6 sources文件 3.2.7 makefile.inc文件 3.2.8 build工具的环境变量 3.2.9 build工具的命令行参数 3.3 用VC编译...
1.2.6 使用图形化IDE建立工程、进行编译..............................................................22 1.2.7 “解决方案”与“工程”.........................................................................
NMAKE.EXE nmaker的MS-DOS扩展驱动程序 CV.EXE 源代码调试器CodeView CVPACK.EXE 调试信息压缩器,它为CODEVIEW准备一个可执行文件 HELPMAKE.EXE 帮助文件维护程序 BSCMAKE.EXE 浏览数据库创建程序 SBRPACK.EXE...