命令行编译工具NMAKE
简介大家已经习惯于微软提供的功能强大的IDE,已经很少考虑手动编连项目了,所谓技多不压身,有空的时候还是随我一块了解一下命令行编译。 C/C++/VC++程序员或有Unix/Linux编程经验应该很熟悉,以前我曾写过一篇文章描述用csc/vbc来进行命令行编译,今天再介绍一下MS提供的更加快捷有效的编译工具NMake。 MSDN的描述: Microsoft 程序维护实用工具 (NMAKE.EXE) 是一个 32 位,基于说明文件中包含的命令生成项目的工具。 NMake具有丰富的选项,可以完成复杂编译操作。它可以辨别源代码的改动,并选择性的编译,为你节省大量不必要的编译时间。 使用NMAKE语法:NMAKE [options] [macros] [targets] [@commandfile] 说明:其中,options是NMAKE的选项,macros是在命令行中的宏定义,targets是NMAKE的目标文件列表,commandfile是包含命令行输入的文本文件(或响应文件)。 NMAKE 使用指定 /F 选项的Makefile(生成文件,通常名字是makefile);如果未指定 /F 选项,则使用当前目录下的Makefile。如果未指定Makefile,则 NMAKE 使用推理规则生成命令行 targets。 NMake本身很简单,与NMAKE配合的是Makefile。Makefile的语法比较复杂,通常需要开发者自己手动编写Makefile,下一节我们详细讲解Makefile。 上面的options和macros做了MSDN的链接,内容较多,请自己查询相关页,可以从这里进入NMake的MSDN帮助页面,在线帮助点这里。 编写MAKEFILE注:本节内容来自MSDN,熟悉此节的朋友可以直接跳过 Makefile的组成部分包括:成文件包含:
a.描述块 描述块是后面可跟有命令块的依赖项行: targets... : dependents...commands... 依赖项行指定一或多个目标以及零或多个依赖项。目标必须位于行首。用冒号 (:) 将目标和依赖项分开;允许使用空格或制表符。若要拆分行,请在目标或依赖项后面使用反斜杠 (\ )。如果目标不存在、目标的时间戳比依赖项早或者目标是伪目标,则 NMAKE 执行命令。如果某依赖项是其他地方的目标,并且不存在或对于自己的依赖项已过期,则 NMAKE 在更新当前依赖项之前更新该依赖项。 b.命令 如果依赖项已过期,则描述块或推理规则指定要运行的命令块。NMAKE 在运行命令之前显示每个命令,除非使用了 /S 选项、.SILENT、!CMDSWITCHES 或 @。如果描述块后面没有紧跟命令块,NMAKE 将查找匹配的推理规则。 命令块包含一个或多个命令,每个命令位于各自的命令行上。在依赖项(或规则)和命令块之间不能出现空行。但是可以出现只包含空格或制表符的行;该行被解释为空命令,并且不出现错误。命令行之间允许有空行。 命令行以一个或多个空格或制表符开始。后面紧跟着换行符的反斜杠 ( \ ) 在命令中被解释为空格;在行尾使用反斜杠继续下一行命令。如果反斜杠后紧跟有其他任何字符(包括空格或制表符),则 NMAKE 按原义解释反斜杠。 无论后面是否紧跟有命令块,前面带分号 (;) 的命令可以出现在依赖项行上或推理规则中: project.obj : project.c project.h ; cl /c project.c c.宏 宏用另一个字符串替换生成文件中的特定字符串。使用宏可以:
可以定义您自己的宏或使用 NMAKE 的预定义宏。 d.推理规则 推理规则提供命令来更新目标并推理目标的依赖项。推理规则中的扩展名与具有相同基名称的单个目标和依赖项匹配。推理规则是用户定义的,或预定义的;预定义的规则可以重新定义。 如果过期的依赖项没有命令,并且如果 .SUFFIXES 包含依赖项的扩展名,则 NMAKE 使用其扩展名与当前或指定目录中的目标和现有文件匹配的规则。如果有多个规则与现有文件匹配,.SUFFIXES 列表将确定使用哪一个规则;列表优先级从左向右按降序排列。如果依赖文件不存在,并且未在另一个描述块中作为目标列出,则推理规则可以从具有相同基名称的另一个文件创建缺少的依赖项。如果描述块的目标没有依赖项或命令,推理规则可以更新目标。即使不存在描述块,推理规则也可以生成命令行目标。即使指定了显式依赖项,NMAKE 也可以调用推理依赖项的规则。 e.点指令 在描述块之外的行首指定点指令。点指令以句点 ( . ) 开始,后面跟一个冒号 (:)。允许使用空格或制表符。点指令名区分大小写并且应为大写。
若要更改 .SUFFIXES 列表顺序或指定新列表,请清除此列表并指定新的设置。若要清除此列表,请不要在冒号后指定扩展名: .SUFFIXES : 若要将其他后缀添加到列表的末尾,请指定 .SUFFIXES : suffixlist 其中 suffixlist 是附加后缀的列表,由一或多个空格或制表符分隔。若要查看 .SUFFIXES 的当前设置,请运行选项为 /P 的 NMAKE。 f.预处理指令 可以通过使用预处理指令和表达式控制 NMAKE 会话。预处理指令可以放置在生成文件或 Tools.ini 文件中。使用指令可以有条件地处理生成文件,显示错误信息,包括其他生成文件,取消定义宏以及打开或关闭某些选项。 Makefile示例看了一堆理论,很累了吧?下面看一段简单的MakeFile
将上述代码保存为Makefile(没有后缀)放在你的项目文件夹下, 然后打开VS2003.NET命令行窗口,进入项目夹所在路径,打入NMake回车, ok 示例2 下面演示一下多个项目时的编译,每个单独的项目创建单独的makefile,解决方案下放一个总的makefile
小节本文简单介绍了NMAKE的用法,并对Makefile的语法做了介绍。篇幅所限,既不能面面俱到,又不能深入剖析,只希望能够让更多人了解此工具。笔者也是刚刚接触,经验不多,还请各位网友多多拍砖! 附表(makefile中常用的几个符号)
|
转载于:https://www.cnblogs.com/Truly/archive/2005/08/13/213810.html
命令行编译工具NMAKE相关推荐
- 蚂蚁区块链第12课 如何使用命令行编译工具solcjs编译Solidity智能合约?
1,摘要 蚂蚁区块链合约平台支持 Solidity 智能合约,针对合约源代码的编译,可以直接通过蚂蚁区块链 Cloud IDE 合约开发环境进行合约编译.部署.测试和调试. 本文介绍由蚂蚁区块链平台提 ...
- ARM 编译工具keil 和 IAR 命令行编译和下载
关注.星标公众号,不错过精彩内容 来源:网络 编辑整理:strongerHuang 可能很多人都不习惯使用,Keil.IAR自带的编辑器,可能代码补全.错误提示.高亮等编辑功能相对来说支持的不是很好, ...
- 命令行编译Qt程序(qmake+jom/Nmake/mingW)
命令行编译Qt程序(qmake+jom/Nmake/mingW) 一.创建工程,生成以下几个文件 二.命令行编译 创建三个bat文件,分别使用以下三种方式编译 1.qmake+jom编译,使用wind ...
- VC6命令行编译配置
对于大多数在windows上写windows C/C++应用程序的人可能用的都是微软提供的VC++6.0或Visual Studio集成开发环境,但是对想为了更好地理解程序编译链接过程和习惯如linu ...
- python 基础命令-Python unittest第一篇:基础入门+命令行编译
unittest单元测试框架最初受JUnit启发,与其他语言的主要单元测试框架具有相似的风格. 它支持测试自动化,支持开启或关闭某个测试,支持结合测试.另外它可以生成各个单元测试的报告.为了实现以上功 ...
- 命令行编译 WRK ,windbg 调试
一.准备工作 本文记录如何用命令行编译WRK内核,下面列出需要准备的东西: win2k3 sp1 虚拟机环境 WRK v1.2源码 两个需要用到的dll:msvcr71.dll ,msvcp71.dl ...
- 从零开发一个命令行脚手架工具 等
大家好,我是若川.今天周末,话不多说,这一次花了几小时精心为大家挑选了20余篇好文,供大家阅读学习.本文阅读技巧,先粗看标题,感兴趣可以都关注一波,绝对不亏. 前端宇宙 小编就职于某大厂,是个爱前端爱 ...
- win10 uwp 使用 msbuild 命令行编译 UWP 程序
原文:win10 uwp 使用 msbuild 命令行编译 UWP 程序 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http:// ...
- 使用命令行编译Less源文件
用命令行编译Less源文件需要先安装node.js,官方下载地址:http://nodejs.org/ 使用npm包管理工具安装Less编译器 npm install less -g 参数-g 是安装 ...
最新文章
- 天天Linux-Ctrl+S快捷键锁定屏幕的问题
- python解析AMF协议
- 虚拟主机IIS防范入侵常见问答
- 如何限制某些用户发送Internet邮件
- c语言程序课程设计问题,矩形问题-C语言程序课程设课程设计(论文).doc
- Center os vi
- 四六级php,详解四六级查询API+网页
- apm固定翼调试方法
- roads 构筑极致用户体验_万物互联大势所趋 华为保驾护航运营商“三个转型”...
- Oracle体系概要
- orm2 中文文档 4.1 hasOne(多对一关系)
- 关于redis的几点思考
- 异常:Invalid or unexpected token
- 2013蓝桥杯C++B:错误票据
- 按键手机java下载_经典按键java手机游戏
- 需求分析:5W1H分析法
- 计算机学报latex模板\renewcommand\figurename失效
- 福晟集团积极探索让“住有所居”成为新时代转型之路
- 高考数学必考知识点高中数学重点知识归纳
- 基于ESP32环境监测控制和预警(微信小程序)