使用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的时候,还是建议您使用这个选项。(莫非是为了保险?防止真的过期?)
分享到:
相关推荐
makefile 是 Nmake 工具的核心组件,负责管理项目的构建工作。下面将详细介绍 Nmake 工具和 makefile 的使用。 1. makefile 简介 makefile 是一个文本文件,负责帮助开发人员简化代码的编译、链接等构建工作。它...
通过阅读“Nmake.doc”、“nmakefile的使用.doc”和“NMake参考.pdf”这三份文档,你可以深入理解Nmake的工作机制,掌握编写和使用Makefile的技巧,以及在Windows环境下如何利用Nmake高效地管理编译工程。...
这个压缩包“ffmpeg vc6工程源码.zip”包含了FFmpeg在Visual C++ 6.0(简称vc6)环境下的源代码工程,允许开发者在古老的vc6环境下编译和构建FFmpeg项目。下面我们将深入探讨FFmpeg的核心组件、主要功能以及如何在vc...
本文档主要介绍了如何在Windows环境下使用WDK(Windows Driver Kit)来编译和管理驱动程序项目,特别是如何在Visual Studio中利用NMake工具进行编译。以下是详细的知识点: 1. **环境变量设置**:在使用WDK进行驱动...
接着,打开`libCur1.dsp`和`libCur1.dsw`这两个项目文件,它们是VC6.0的工程文件。在项目设置中,确保包含libCurl头文件的路径,通常是在`#include "curl/curl.h"`。同时,记得在链接器选项中加入刚刚提到的静态库...
例如,如果一个项目原本使用nmake的命令是`nmake -f Makefile`,那么使用jom时则改为`jom -f Makefile`。jom会自动检测并行构建的可能性,并分配合适的任务给系统的可用核心。 在实际开发环境中,jom的性能提升不仅...
### GDAL 安装与使用详解 #### 一、GDAL 概述 GDAL(Geospatial Data Abstraction Library)是一种开源的数据访问库,主要处理地理空间数据格式。它支持大量的栅格(Raster)和矢量(Vector)格式,并且能够进行...
【Makefile文件写法】和【手工生成VC++工程需要用到的Makefile】是关于在Windows环境下,使用nmake工具和Makefile进行C++程序编译的主题。Makefile是描述项目构建规则的文件,用于自动化编译和链接过程,极大地提高...
工程创建后,会生成一个空的工程管理窗口,这是项目开发的中心,用于管理工程中的各种文件和设置。 在工程管理窗口中,开发者需要添加启动文件,这些文件包含了为特定开发板,如44B0学习评估板,提供的初始化代码。...
总的来说,理解和编译OpenSSL涉及到了Windows平台的编译环境配置、Makefile的使用、C++编程知识以及一些基础的软件工程实践。这对于开发需要加密和安全通信功能的应用程序来说是非常重要的,比如HTTPS服务器、客户端...
这个文件随后将用于生成包括集成开发环境在内的本地开发工具(例如Microsoft Visual Studio , Apple’s Xcode ,Unix Linux,Nmake,Borlandstyle Makefiles)的工程文件。CMake允许用户通过简单的裁剪构建出复杂的硬件...
6. **构建项目**:现在你可以打开生成的Visual Studio解决方案或使用NMake来编译项目。在Visual Studio中,只需加载`.sln`文件并点击“生成解决方案”。对于NMake,可以使用`cmake --build .`命令。 CMake的主要...
- **添加启动文件到项目**:通过工程管理窗口中的“Add Files…”选项添加启动文件至“44B0X”组。 #### 五、配置调试方式 - **调试方式选择**:在添加文件过程中,CodeWarrior IDE自动为用户创建了三种调试方式的...
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 ...
描述中提到的 "使用VS2008建立VC工程编译openssl的两个重要库",指的是动态链接库(.dll)和静态链接库(.lib)。动态链接库在运行时加载到内存,而静态链接库则在编译时将代码合并到最终的可执行文件中。对于开发和...
总之,MAKEFILE和NMAKE是程序员的得力助手,它们通过清晰地定义文件依赖关系和构建步骤,使得软件工程的构建过程更加有序和高效。学习和掌握MAKEFILE的使用,对于提升软件开发的生产力至关重要。在实践中,不断优化...
以上内容总结了Qt4中文教程中的关键知识点,包括如何编写简单的Qt程序、信号与槽的基本使用以及如何使用布局管理器来组织控件。通过这些基础知识的学习,开发者可以进一步探索Qt框架的高级功能。
它通过一系列的指令来控制编译流程,使开发者能够高效地管理复杂的工程项目。 - **作用**:Makefile在软件开发中扮演着关键角色,尤其是在大型项目中。它可以自动识别哪些文件需要重新编译,并执行相应的编译操作。...