使用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管理工程相关推荐

  1. linux opencv cmake,OpenCV基础篇之使用CMake管理工程

    OpenCV基础篇之使用CMake管理工程 程序及分析 /* * FileName : read.cpp * Author  : xiahouzuoxin @163.com * Version  : ...

  2. hadoop实训报告总结及体会_管理工程学院举办电子商务实训表彰大会

    管理工程学院举办电子商务实训 表彰大会 管理工程学院举办电子商务实训 表彰大会 时间:2019-1-9      信息来源:管理工程学院 2019年1月9日下午三点,管理工程学院在8号楼创业大讲堂隆重 ...

  3. 【往届会议已EI检索】第六届管理工程、软件工程与服务科学国际会议

    ICMSS 2022 2022年第六届管理工程.软件工程与服务科学国际会议(ICMSS 2022)将于2022年1月7-9日在武汉举办.会议旨在为新兴的管理工程.软件工程和服务科学的专业人士,学者与研 ...

  4. Simulink学习——使用Simulink Project去管理工程文件

    使用Simulink Project去管理工程文件 当模型内容不断增长后,管理模型会变得复杂起来.挺难记住那么多文件,和他们之间的关系.比如前面几期,我们又用了m文件去管理变量,又创建了复用组件给主模 ...

  5. 电子工程管理案例_管理工程学院举办电子商务实训表彰大会

    管理工程学院举办电子商务实训 表彰大会 管理工程学院举办电子商务实训 表彰大会 时间:2019-1-9      信息来源:管理工程学院 2019年1月9日下午三点,管理工程学院在8号楼创业大讲堂隆重 ...

  6. SpringBoot:Actuator 监控管理工程各项信息

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 在微服务体系中,有很多工程相互作用,如果其中某一个Down 了,可能就不是那么容易快速定位 bug ...

  7. 就业技术书文件表格_429页标准指南,教你如何管理工程监理文件资料,丰富图表一看就会...

    房屋建筑工程监理文件资料的管理,参差不齐,也给监理工作带来了很大障碍. 这份房建工程监理文件资料管理标准指南,能够帮助广大监理和资料员们实现监理文件资料标准化管理,能够有效地补充和支撑现场监理工作,对 ...

  8. svn如何取消某个文件的版本管理_微服务架构如何统一管理工程配置文件

    面临的问题 在分布式微服务架构系统中,业务和系统功能被拆分成了几十甚至上百个服务实例.每个服务实例就是以往单体应用时代的一个独立部署的工程.每个工程都需要自己独立的启动加载和运行时配置文件. 在项目开 ...

  9. 工程管理系统源码-专注项目数字化管理-工程管理

    高效的工程项目管理软件不仅能够提高效率还应可以帮你节省成本提升利润 在工程行业中,管理不畅以及不良的项目执行,往往会导致项目延期.成本上升.回款拖后,最终导致项目整体盈利下降.企企管理云业财一体化的项 ...

最新文章

  1. torch.log函数
  2. Nginx —— 用HTTP proxy module配置一个反向代理服务器
  3. 【jzoj】2018.2.3NOIP普及组——D组模拟赛
  4. 刷新认知!基因表达,男女有别|Science、Cell等发布15篇人类遗传调控新成果
  5. 又学到了一个拒绝加班的技巧
  6. 12 个月 vs. 1 个月,你的年终奖是多少?
  7. 最适合人工智能的编程语言:JAVA人工智能程序编程
  8. 【征文】极客头条使用体验及改进建议
  9. SQL查询中的笛卡尔积现象解决方法
  10. 主流的推荐系统算法总结
  11. asset文件夹路径 unity_Unity资源常用目录和路径大总结
  12. Windows下安装tomcat7并设置开机启动服务
  13. 阿里云os边缘应用程序的三个问题
  14. 从一条微博揭秘专黑大V名人的定向攻击
  15. 自定义circleindicator
  16. 带遮挡效果的轮廓线(描边)在3D实时渲染中的一种实现
  17. openstack compute service list报错(HTTP 503)
  18. ios 内存深度优化_iOS内存优化
  19. Java bin 目录下的小工具使用与学习
  20. c++ vector 一部分_巴博斯制定奔驰C级(W204)全套改装方案,运动范er十足

热门文章

  1. springdatajpa命名规则_简单了解下spring data jpa
  2. keil git 编译文件_keil下的STM32程序开发部署(一)
  3. Python知识点4——if分支与while循环
  4. 记录一下CUDA-opencv联合编程
  5. spring单元测试无法注入bean_2019年,最新的Spring 面试108题 “ 系列 ”,附带答案.........
  6. python转csv_python – 如何将.tsv转换为.csv?
  7. Django搭建个人博客:渲染Markdown文章目录
  8. Intellij IDEA 中无法下载 Cloud Toolkit 问题解决
  9. with(nolock)的用法
  10. 为什么说一知半解的人生最可怕?