使用NMAKE管理工程

来源:互联网 发布:中国软件行业协会会员 编辑:程序博客网 时间:2024/05/16 12:38

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

         

     

 

       

 

 

            

 

       

 

 

 

 

 

 

 

 

原创粉丝点击