`
daojin
  • 浏览: 690004 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

使用NMAKE管理工程

阅读更多

使用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的时候,还是建议您使用这个选项。(莫非是为了保险?防止真的过期?)

         

     

 

       

 

 

            

 

       

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    nmake工具的使用

    makefile 是 Nmake 工具的核心组件,负责管理项目的构建工作。下面将详细介绍 Nmake 工具和 makefile 的使用。 1. makefile 简介 makefile 是一个文本文件,负责帮助开发人员简化代码的编译、链接等构建工作。它...

    Nmake相关的几个文档

    通过阅读“Nmake.doc”、“nmakefile的使用.doc”和“NMake参考.pdf”这三份文档,你可以深入理解Nmake的工作机制,掌握编写和使用Makefile的技巧,以及在Windows环境下如何利用Nmake高效地管理编译工程。...

    ffmpeg vc6工程源码.zip

    这个压缩包“ffmpeg vc6工程源码.zip”包含了FFmpeg在Visual C++ 6.0(简称vc6)环境下的源代码工程,允许开发者在古老的vc6环境下编译和构建FFmpeg项目。下面我们将深入探讨FFmpeg的核心组件、主要功能以及如何在vc...

    读我.doc————电子版_doc版

    本文档主要介绍了如何在Windows环境下使用WDK(Windows Driver Kit)来编译和管理驱动程序项目,特别是如何在Visual Studio中利用NMake工具进行编译。以下是详细的知识点: 1. **环境变量设置**:在使用WDK进行驱动...

    vc6.0 libCurl 简单使用

    接着,打开`libCur1.dsp`和`libCur1.dsw`这两个项目文件,它们是VC6.0的工程文件。在项目设置中,确保包含libCurl头文件的路径,通常是在`#include "curl/curl.h"`。同时,记得在链接器选项中加入刚刚提到的静态库...

    jom_1_0_14

    例如,如果一个项目原本使用nmake的命令是`nmake -f Makefile`,那么使用jom时则改为`jom -f Makefile`。jom会自动检测并行构建的可能性,并分配合适的任务给系统的可用核心。 在实际开发环境中,jom的性能提升不仅...

    GDAL安装与使用

    ### GDAL 安装与使用详解 #### 一、GDAL 概述 GDAL(Geospatial Data Abstraction Library)是一种开源的数据访问库,主要处理地理空间数据格式。它支持大量的栅格(Raster)和矢量(Vector)格式,并且能够进行...

    makefile文件写法

    【Makefile文件写法】和【手工生成VC++工程需要用到的Makefile】是关于在Windows环境下,使用nmake工具和Makefile进行C++程序编译的主题。Makefile是描述项目构建规则的文件,用于自动化编译和链接过程,极大地提高...

    ADS1.2+实例+教

    工程创建后,会生成一个空的工程管理窗口,这是项目开发的中心,用于管理工程中的各种文件和设置。 在工程管理窗口中,开发者需要添加启动文件,这些文件包含了为特定开发板,如44B0学习评估板,提供的初始化代码。...

    OpenSSL编译文件

    总的来说,理解和编译OpenSSL涉及到了Windows平台的编译环境配置、Makefile的使用、C++编程知识以及一些基础的软件工程实践。这对于开发需要加密和安全通信功能的应用程序来说是非常重要的,比如HTTPS服务器、客户端...

    mastering-cmake.zip

    这个文件随后将用于生成包括集成开发环境在内的本地开发工具(例如Microsoft Visual Studio , Apple’s Xcode ,Unix Linux,Nmake,Borlandstyle Makefiles)的工程文件。CMake允许用户通过简单的裁剪构建出复杂的硬件...

    CMAKE under Win7

    6. **构建项目**:现在你可以打开生成的Visual Studio解决方案或使用NMake来编译项目。在Visual Studio中,只需加载`.sln`文件并点击“生成解决方案”。对于NMake,可以使用`cmake --build .`命令。 CMake的主要...

    ads 使用教程 ads 使用教程

    - **添加启动文件到项目**:通过工程管理窗口中的“Add Files…”选项添加启动文件至“44B0X”组。 #### 五、配置调试方式 - **调试方式选择**:在添加文件过程中,CodeWarrior IDE自动为用户创建了三种调试方式的...

    精通Windows.API-函数、接口、编程实例.pdf

    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 ...

    openssl0.9.8 vc可编译代码

    描述中提到的 "使用VS2008建立VC工程编译openssl的两个重要库",指的是动态链接库(.dll)和静态链接库(.lib)。动态链接库在运行时加载到内存,而静态链接库则在编译时将代码合并到最终的可执行文件中。对于开发和...

    MAKEFILE简明指南

    总之,MAKEFILE和NMAKE是程序员的得力助手,它们通过清晰地定义文件依赖关系和构建步骤,使得软件工程的构建过程更加有序和高效。学习和掌握MAKEFILE的使用,对于提升软件开发的生产力至关重要。在实践中,不断优化...

    Qt4中文教程 结合实例学习

    以上内容总结了Qt4中文教程中的关键知识点,包括如何编写简单的Qt程序、信号与槽的基本使用以及如何使用布局管理器来组织控件。通过这些基础知识的学习,开发者可以进一步探索Qt框架的高级功能。

    Makefile中文教程

    它通过一系列的指令来控制编译流程,使开发者能够高效地管理复杂的工程项目。 - **作用**:Makefile在软件开发中扮演着关键角色,尤其是在大型项目中。它可以自动识别哪些文件需要重新编译,并执行相应的编译操作。...

Global site tag (gtag.js) - Google Analytics