NMAKE
来源:互联网 发布:淘宝运费价格怎么写 编辑:程序博客网 时间:2024/05/22 02:49
语法: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的组成部分包括:成文件包含:
- 描述块 (description block)
- 命令
- 宏
- 推理规则 (inference rules)
- 点指令
- 预处理指令
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
# 宏定义
SOURCES=AssemblyInfo.cs /
Form1.cs /
Form2.cs /
Form3.cs /
HelloWorld.cs
# 引用规则
# 目标:
CLRProfiler.exe : $(SOURCES) #<--依赖项
# 标志
# 下面是命令
csc /t:winexe /out:HelloWorld.exe /r:System.Windows.Forms.dll $(SOURCES)
clean:
del HelloWorld.exe
将上述代码保存为Makefile(没有后缀)放在你的项目文件夹下, 然后打开VS2003.NET命令行窗口,进入项目夹所在路径,打入NMake回车, ok
示例2
下面演示一下多个项目时的编译,每个单独的项目创建单独的makefile,解决方案下放一个总的makefile
all:
# 分别对项目进行编译
cd project1
nmake
cd ..
cd project2
nmake
cd ..
cd project3
nmake
cd ..
# 将编译结果汇总到当前路径
copy project1/project1.dll
copy project2/project2.dll
copy project3/project3.exe
clean:
# 清除编译结果
del project1.dll
del project2.dll
del project3.exe
cd project1
nmake clean
cd ..
cd project2
nmake clean
cd ..
cd project3
nmake clean
cd ..
小节
本文简单介绍了NMAKE的用法,并对Makefile的语法做了介绍。篇幅所限,既不能面面俱到,又不能深入剖析,只希望能够让更多人了解此工具。笔者也是刚刚接触,经验不多,还请各位网友多多拍砖!
附表(makefile中常用的几个符号)
- NMAKE
- NMAKE
- nmake
- nmake
- Nmake使用方法
- nmake ,cl
- 关于NMAKE
- Nmake使用方法
- nmake使用
- nmake使用
- nmake使用
- nmake使用
- nmake.exe
- nmake选项
- VC++NMAKE
- nmake (一)
- Nmake入门(一)
- NMAKE的命令行语法
- system.times.timer与system.windows.forms.timer的区别
- 笑话
- MyEclipse 和Eclipse的快捷键
- MSSQL扩展存储过程 master.dbo.xp_sqlagent_enum_jobs--整理帖
- Uboot启动流程分析
- NMAKE
- MSSQL日期推算--本周一的日期和本周结束日期本月开始日期和本月结束日期
- 根据反射得到一个hibernate实体的主键
- 如何使用jquery对特殊字符进行转义,防止js注入
- C语言string.h中的函数
- 服务器并发能力测试 Apache Beach - Tech - JavaEye论坛
- 杀死长时间占用CPU的进程
- 某外企SQL Server面試題
- 常用JS收集