??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
]]>
它一般需要包含以下内?/p>
1.注释
2.宏定?/p>
3.昄规则
4.隐含规则
Z方便使用Q一般都把描q文件的文g名取为默认文件名Qmakefile。这个例子的makefile文g如下Q注意前面括号里的是行号Q不是文件的真正内容Q:
(001) # nmake工具的描q文件例?br>(002) EXE = Test.exe #指定输出文g
(003) OBJS = x.obj \
(004) y.obj #需要的目标文g
(005) RES = x.res #需要的资源文g
(006)
(007) LINK_FLAG = /subsystem:windows #链接选项
(008) ML_FLAG = /c /coff #~译选项
(009)
(010) #定义依赖关系和执行命?br>(011) $(EXE): $(OBJS) $(RES)
(012) Link $(LINK_FLAG) /out:$(EXE) $(OBJS) $(RES)
(013) $(OBJS): Common.inc
(014) y.obj: y.inc
(015)
(016) #定义汇编~译和资源编译的默认规则
(017) .asm.obj:
(018) ml $(ML_FLAG) $<
(019) .rc.res:
(020) rc $<
(021)
(022) #清除临时文g
(023) clean:
(024) del *.obj
(025) del *.res
1. 注释和换?br>makefile中的注释是以#号开头一直到行尾的字W,当nmake工具处理到这些字W的时候,它会完全忽略#号及全部注释字符?br>当一行的内容q长的时候,可以用换行符来l,makefile的换行符是\Q如例子中的W三行和W四行可以合qؓQ?br>OBJS = x.obj y.obj #需要的目标文g
在用换行符的时候要注意?#8220;\”后面不能再加上其他字W,包括注释和空|否则nmake到“\”不在一行的最后,׃会把它当成换行符解释Q就会出现错误?br>2. 宏定?br>makefile中允怋用简单的宏定义指代源文g及其相关~译信息Q可以把宏称为变量,在整个描q文件中Q只要符合下面语法的行就是宏定义Q?br>变量?变量内容
如上面例子文件中??是宏定义,在引用宏时只需在变量前?W号Q但是要注意的是Q如果变量名的长度超q一个字W,在引用时必d圆括PQ,下面都是有效的宏引用Q?br>$(LINK_FLAG)
$(EXE)
$A
$(A)
其中最后两个引用是完全一致的?br>宏定义的使用可以使makefile的用更灉|Q首先可以文g便于修改Q比如把W?行和W?8行中ml的选项部分写成宏定义,以后要改变编译选项的时候,只要直接在makefile文g头部改变宏定义就可以了,不必重新阅读整个makefile文gQ其ơ,当不止一个地方用到同一个文件的时候,把文件名定义为宏定义可以减少错误Q增加可L,同时也可以便于修改;最大的好处是可以直接在命o行中用新的宏定义覆盖Q比如在命o行中键入Q?br>nmake ML_FLAG="/c /coff /Fl"
那么q时׃以新?c /coff /Fl定义代替makefile中定义的/c /coffQ在q种使用中要注意两个问题Q一是宏名称要区分大写QML_FLAG和ml_flag是不一LQ二是定义g有空格的时候要用双引号引v来,没有I格时可以不用双引号Q如ML_FLAG=/cQ这使时用不同的参数~译文g时可以不必修改makefile?br>3. 昑ּ规则
makefile中包含有一些规则,q些规则定义了文件之间的依赖关系和生命令,一个规则的格式是这LQ?br>目标文gQ依赖文Ӟ命o Q方?Q?br>?br>目标文gQ依赖文?nbsp; Q方?Q?br> 命o
在规则定义和命o行中Q不能包含注释,例子中的W?1?2行把宏定义展开后就是:
test.exeQx.obj y.obj x.res
Link /subsystem:windows /out:test.exe x.obj y.obj x.res
q里的目标文件就是test.exeQ它依赖?个文件x.objQy.obj和x.resQ如果有必要Q生目标文件的命o是下面的Link命oQ整个规则可以用两种ҎQ用W二U方法的时候,命o可以从第二行开始,W一行的“Q?#8221;省略Q但是这时命令前面必L一个Tab字符Q否则nmake无法区分q究竟是命oq是别的定义。目标文件可以有多个Q依赖文件也可以有多个,同时命o也可以由多个命o行组成,当然q时候就必须用第二种Ҏ定义了?br>我们也可以用test.exe生成的规则定义其他文Ӟ如x.obj或x.res的生成方法,但nmake如何知道哪个是最l要make的文件呢Q实际上nmake默认整个描q文件的W一条规则中的目标文件认为是最l文Ӟ如果我们?1Q?2行放到第13行后面,那么x.obj和y.obj的徏立规则就成了W一条规则,nmake建立了x.obj和x.obj之后׃理会test.exe的徏立了Q所以我们必L最l需要生成的文g攑֜W一条规则定义。当Ӟ在nmake的命令行参数中可以指定要make的目标,如我们要生成x.res文gQ那么不必修改makefilex.res的描q规则移动到最前面Q而是直接在命令行键入以下命o卛_Q?br>nmake x.res
参数中也可以同时带好几个目标文g名,nmake会一一处理Q如果指定的目标文g没有对应的规则,nmake会返回一个出错信息:
fatal error U1073: don't know how to make 'xxx文g'
当用戯求nmaked造一个目标时Qmake会去扑ֈq个目标的依赖规则,q时W二行中的命令ƈ不会立刻执行,而是首先要做一些事情:nmake先去查依赖文件是否是另一条规则的目标文gQ如果是则先处理q一条规则,否则不是Qnmake再检查各个依赖文件的旉Q看q些文g有没有比目标文g更新的,如果没有Qnmake会决定不再重新徏造目标文Ӟq给出提C:'xxx文g' is up-to-dateQ如果依赖文件有比目标文件更新的Q才执行命o?br>所以一个顺序下来,所有的目标文g以及它们的依赖文Ӟ以及依赖文g的依赖文仉会被查ƈ更新Q总而言之,一个目标文件的建立包含了顺序正的指o链接Q这个链接结构是树状的,目标文g是根Q一U扩展到多个文Ӟ我们要求的是nmaked立链接中处于栚w的那个文Ӟnmake会根据链接结构从目标开始向初始状态前q,最后慢慢回来,在这个过E中执行建立每个文g所必须的命令,一直到最l目标徏立完成?br>目标也可以没有依赖文Ӟ而且目标也可以不是一个真正存在的文gQ如例子W?3行到W?5行中的clean是一个目标,但我们ƈ不是要生成一个clean文gQ而是希望在文件调试完毕后用nmake来清除时文Ӟ当我们键入nmake clean的时候,工作目录下ƈ没有cleanq个文gQ那么nmake׃L行clean定义中的命oQ因为nmake把每一个不存在的目标当做是一个过时的目标Q如此一来,׃删除中间q程中的文g*.obj?.res?br>指出了目标文件全名的规则UCؓ昑ּ规则Q但有些cd的文件的~译Ҏ可以是雷?的,如从asm文g产生obj文g的命令L用mlQ从rc文g产生res文g的命令L用rcQ对于每个文仉写一条规则有些多余,q时候就要用到隐含规则?br>4. 隐含规则
隐含规则可以为某一cȝ文g指出建立的命令,它具体定义了如何带一个特定扩展名的文件{换成h另一U扩展名的文Ӟ定义的格式是Q?br>.源扩展名.目标扩展名:Q命?nbsp; Q方?Q?br>?br>.源扩展名.目标扩展名: Q方?Q?br> 命o
隐含规则的语法和昑ּ规则怼Q也是用“Q?#8221;隔开Q在“Q?#8221;下面书写命oQ也可以不用“Q?#8221;而将命o写在W二行,同理Q这时命令之前要加一个Tab字符?br>隐含规则不能有依赖文Ӟ所?#8220;Q?#8221;下面没有内容Q例子中的第17?8行定义了从asm文g建立obj文g的隐含规则,W?9?0行定义了从rc文g建立res文g的隐含规则,隐含规则中无法指定确定的输入文g名,因ؓ输入文g名是泛指的有相同扩展名的一整类?Ӟq时候就要用到几个特D的内定宏来指定文g名,q些宏是$@Q?*Q???<Q它们的含义如下Q?br>?nbsp; $@ —?全\径的目标文g?br>?nbsp; $* —?除去扩展名的全\径的目标文g?br>?nbsp; $? —?所有源文g名?br>?nbsp; $< —?源文件名Q只能用在隐含规则中Q?br>所以第19?0行中的rc $< 用于x.rc的时候就是rc x.rc?br>读者可以注意到一些显式规则没有命令行Q如W?3行的“$(OBJS): Common.inc”指出了所有的obj文g全部依赖于Common.inc文gQ第14行的“y.obj: y.inc”则指Zy.obj同时也依赖于y.inc和第13行的规则合ƈQy.obj依赖于Common.inc也依赖于y.incQ但是这两条规则都没有指Z生这些obj文g的命令,所以nmake处理的时候会到隐含规则中L命o行,最后会用第18行的“ml $(ML_FLAG) $<”命oM生这些obj文g?/p>
本文来自CSDN博客Q{载请标明出处Q?a >http://blog.csdn.net/hust_chen/archive/2008/04/25/2329368.aspx
选项 作用
/O1 创徏代?
/O2 创徏快速代?
/Oa 假设没有别名
/Ob 控制内联展开
/Od 用优化
/Og 使用全局优化
/Oi 生成内部函数
/Op 改善点C致?
/Os 代码大小优先
/Ot 代码速度优先
/Ow 假定在函数调用中使用别名
/Ox 使用最大优?(/Ob1gity /Gs)
/Oy 省略框架指针
代码生成
选项 作用
/clr 启用 C++ 的托扩展ƈ产生在公paq行库上q行的输出文?
/EH 指定异常处理模型
/G3 优化代码以优?386 处理器。在 Visual C++ 5.0 中已l停用,~译器将忽略此选项
/G4 优化代码以优?486 处理器。在 Visual C++ 5.0 中已l停用,~译器将忽略此选项
/G5 优化代码以优?Pentium
/GB ?/G6 {效Q将 _M_IX86 的D|ؓ 600
/Gd 使用 __cdecl 调用U定
/Ge Ȁzd栈探?
/GF
/GF 启用字符串池
/GH 调用挂钩函数 _penter
/GH 调用挂钩函数 _pexit
/GL 启用全程序优?
/Gm 启用最重新生?
/Gr 启用q行时类型信?(RTTI)
/Gr 使用 __fastcall 调用U定
/GS 控制堆栈探测
/GT 支持使用静态线E本地存储区分配的数据的U程安全
/GX 启用同步异常处理
/Gy 启用函数U链?
/GZ 使用 __stdcall 调用U定
/MD 使用 MSVCRT.lib 创徏多线E?DLL
/MDd 使用 MSVCRTD.lib 创徏调试多线E?DLL
/ML 使用 LIBC.lib 创徏单线E可执行文g
/MLd 使用 LIBCD.lib 创徏调试单线E可执行文g
/MT 使用 LIBCMT.lib 创徏多线E可执行文g
/MTd 使用 LIBCMTD.lib 创徏调试多线E可执行文g
输出文g
选项 作用
/FA
/FA 创徏列表文g
讄列表文g?
/Fd 重命名程序数据库文g
/Fe 重命名可执行文g
/Fm 创徏映射文g
/Fo 创徏对象文g
/Fp 指定预编译头文g?
/FR
/FR 生成览器文?
/Fx 插入的代码与源文g合ƈ
调试
选项 作用
/GS ~冲区安全检?
/GZ ?/RTC1 相同
/RTC 启用q行旉误检?
/Wp64 ?64 位可UL性问?
/Yd 完整的调试信息攑֜所有对象文件中
/Yl 创徏调试库时插入 PCH 引用
/Z7 生成?C 7.0 兼容的调试信?
/Zd 生成行号
/Zi 生成完整的调试信?
预处理器
选项 作用
/AI 指定在解析传递到#using 指o的文件引用时搜烦的目?
/c 在预处理期间保留注释
/D 定义常数和宏
/E 预处理器输出复制到标准输出
/EP 预处理器输出复制到标准输出
/Fl 预处理指定的包含文g
/FU 强制使用文g名,像它已被传递到#using 指o一?
/I 在目录中搜烦包含文g
/P 预处理器输出写入文?
/U U除预定义宏
/U U除所有的预定义宏
/X 忽略标准包含目录
/ZI 调试信息包含在?#8220;~辑ql?#8221;兼容的程序数据库?
(?#8220;~辑ql?#8221;Q编辑ƈl箋”处理大多数类型的代码更改。但是,在程序执行期_某些更改无法应用。若要应用这些更改,必须暂停执行q生成新版本的代码?
在调试会话期间不能应用下?C/C++ 更改Q?
大多数的全局或静态数据的更改?
从其他计机复制q且未在本地生成的可执行文g的更攏V?
影响一个对象(如类的数据成员)布局的数据类型的更改?
d过 64k 字节的新代码或数据?
d要求在指令指针前存在构造函数的变量?
影响需要运行时初始化的代码的更攏V?
在某些实例中Q添加异常处理程序?
资源文g的更攏V?
只读文g中的代码更改?
没有相应 PDB 文g的代码的更改?
没有对象文g的代码的更改?
在以下调试方案中Q?#8220;~辑ql?#8221;不可用:
?Windows 98 上调试?
混合模式Q本?托管Q调试?
SQL 调试?
调试 Dr. Watson 转储?
在未选择“在未处理的异怸展开调用堆栈”选项的情况下Q在发生未处理的异常之后~辑代码?
调试嵌入式运行库应用E序?
?#8220;调试”菜单中?#8220;附加?#8221;调试应用E序Q而不是?#8220;启动”q行应用E序?
调试优化后的代码?
当目标ؓ 64 位应用程序时Q调试托代码。如果想要?#8220;~辑ql?#8221;Q必d目标q_讄?x86?Q?#8220;Project 属?#8221;对话?>“~译”选项?>“高~译?#8221;讄。)
如果׃生成错误无法生成新版本的代码Q则Ҏ版本的代码进行调?
语言
选项 作用
/noBool 取消 C++ bool、true ?false 关键?
/vd 取消或启用隐藏的 vtordisp cL?
/vmb Ҏ向成员的指针使用最佳的?
/vmg Ҏ向成员的指针使用完全一般?
/vmm 声明多重l承
/vms 声明单一l承
/vmv 声明虚拟l承
/Za 用语言扩展
/Zc ?/Ze 下指定标准行?
/Ze 启用语言扩展
/Zg 生成函数原型
/Zl ?.obj 文g中移除默认库?
/Zp n 装l构成员
/Zs 只检查语?/p>
链接
选项 作用
/F 讄堆栈大小
/LD 创徏动态链接库
/LDd 创徏调试动态链接库
/link 指定的选项传递给 LINK
/MD 使用 MSVCRT.lib ~译以创建多U程 DLL
/MDd 使用 MSVCRTD.lib ~译以创试多U程 DLL
/ML 使用 LIBC.lib ~译以创建单U程可执行文?
/MLd 使用 LIBCD.lib ~译以创试单U程可执行文?
/MT 使用 LIBCMT.lib ~译以创建多U程可执行文?
/MTd 使用 LIBCMTD.lib ~译以创试多U程可执行文?
预编译头
选项 作用
/Y- 忽略当前生成中的所有其他预~译头编译器选项
/Yc 创徏预编译头文g
/Yd 完整的调试信息攑֜所有对象文件中
/Yu 在生成期间用预~译头文?
/YX 自动处理预编译头
杂项
选项 作用
@ 指定响应文g
/? 列出~译器选项
/c ~译但不链接
/H 限制外部Q公共)名称的长?
/HELP 列出~译器选项
/J 更改默认?char cd
/NOLOGO 取消昄d版权标志
/QI0f 保 Pentium 0F 指o没有问题
/QIfdiv FDIV、FPREM、FPTAN ?FPATAN 指o有缺L Intel Pentium 微处理器的变通方?
QIfist 当需要从点cd转换为整型时取消 Helper 函数 _ftol 的调?
/showIncludes 在编译期间显C所有包含文件的列表
/Tc
/Tc 指定 C 源文?
/Tp
/Tp 指定 C++ 源文?
/V 讄版本字符?
/w 讄警告{
/w 用所有警?
/Wall 启用所有警告,包括默认情况下禁用的警告
/WL 在从命o行编?C++ 源代码时启用错误信息和警告消息的单行诊断
/Zm 讄~译器的内存分配限制
CL 命o行用下列语法:
CL [option...] file... [option | file]... [lib...] [@command-file] [/link link-opt...]
下表说明CL 命o的输入项意义
option 一个或多个 CL 选项。请注意Q所有选项都应用于所有指定的源文件。选项是由一个正斜杠 (/) 或一个短划线 (–) 指定的。如果某个选项带有参数Q则该选项的说明指定在选项和参C间是否允许有I格。选项名(/HELP 选项除外Q区分大写。有x多信息,请参?CL 选项的顺序?
file 一个或多个源文件?obj 文g或库的名U。CL ~译源文件ƈ?.obj 文g和库的名UC递给链接器。有x多信息,请参?CL 文g名语法?
lib 一个或多个库名。CL 这些名UC递给链接器?
command-file 包含多个选项和文件名的文件。有x多信息,请参?CL 命o文g?
link-opt 一个或多个链接器选项。CL 这些选项传递给链接器?
您可以指定Q意数目的选项、文件名和库名,条g是命令行上的字符C过 1024Q该限制是操作系l指定的?
CL 命o文g请参?
讄~译器选项 | ~译器选项
命o文g是一个文本文Ӟ它包含您另外在命令行上键入或使用 CL 环境变量指定的选项和文件名。CL 接受?CL 环境变量中或命o行上用作参数的编译器命o文g。与命o行或 CL 环境变量不同Q命令文件允怋用多行选项和文件名?
命o文g中的选项和文件名根?CL 环境变量中或命o行上的命令文件名的位|被q行处理。但是,如果 /link 选项出现在命令文件中Q则该行其余部分的所有选项被传递给链接器。命令文件的后面几行中的选项和命令行上命令文件调用之后的选项仍被作ؓ~译器选项接受?
命o文g一定不能包?CL 命o。每个选项必须在同一行上开始和l束Q不能用反斜杠 (\) 跨行l合一个选项?
命o文g用一?@ W后接一个文件名指定Q该文g名可指定l对路径或相对\径?/p>
本文来自CSDN博客Q{载请标明出处Q?a >http://blog.csdn.net/mickey139/archive/2009/06/01/4232489.aspx
用于l束q程的DOS命o
描述: 参数列表: /U[domain\]user指定应该在哪个用户上下文 /P[password] 为提供的用户上下文指?br>密码。如果忽略,提示输入?/p> /F 指定要强行终?br>q程?/p> /FI filter 指定{选进或筛选出查询?br>的Q务?/p> /PIDprocess id 指定要终止的q程?br>PID?/p> /IM image name 指定要终止的q程?br>囑փ名。通配W?'*' /T Tree kill: l止指定的进E?br>和Q何由此启动的子进E?/p> /? 昄帮助/用法?/p> {选器: 注意: 只有带有{选器的情况下Q才能跟 /IM 切换使用通配W?'*'?/p> 注意: q程q程L要强行终止, 例如: Windows DOs命o之Taskkill 语法 参数 /pid ProcessID taskkill /pid 1230 /pid 1241 /pid 1253 使用格式 参数含义 /U [domain\]user 指定使用哪个用户执行q个命o? /P [password] 为指定的用户指定密码? /M [module] 列出调用指定的DLL模块的所有进E。如果没有指定模块名Q显C每个进E加载的所有模块? /SVC 昄每个q程中的服务? /V 昄详细信息? /FI filter 昄一pdW合{选器指定的进E? /FO format 指定输出格式Q有效|TABLE、LIST、CSV? /NH 指定输出中不昄栏目标题。只对TABLE和CSV格式有效? 应用实例? 2.查看q程pȝ的进E? 3.查看pȝq程提供的服? 4.查看调用DLL模块文g的进E列? 5.使用{选器查找指定的进E? 提C? ================ l束一个或多个d或进E。可以根据进E?ID 或图像名来结束进E?/p> |