如何使用nmake

哈哈,刚开始由于对nmake一点也不理解,一直把它放到程序的最后一步,结果刚刚才发现它的好处,真后悔没有第一步先研究nmake呀,。。下面是我在学习nmake时做的一些笔记,希望一些朋友有帮助。。
============================================
刚学习nmake的时候,第一件事当然是去查msdn的资料库,下面的链结是msdn中有关nmake的资料:

  英文版                中文版                

大家可以去msdn上的网站上看看,个人认为里面介绍了很多nmake的细节,我刚开始去那看的时候,并没有看懂,反而让我觉的nmake好像很难的样子。。。不过你要是想彻底理解nmake的用处,那上面二个链结可是非常有用的。。

关于nmake的定义,在< >一书中,作者是这样定义的:
"nmake is Microsoft's version of the UNIX make tool, and a version is inluded with the .NET platform SDK.  nmake processes a makefile, which indicates how to build each target(often an output file) and lists dependencies between files involved in the build process."

我没有C或者UNIX的编程经验,而我在网上查找资料的时候,都有提到nmake在C语言和UNIX编程中的广泛应用,而如上定义,在.NET中的nmake,其实是一种微软版的Unix工具,并且包含在.NET 平台中。

要执行nmake,不能少了它的好伙伴,makefile,而这个makefile文件则包含了实际的代码。举个例子:

我们需要创建一个AutoBox.dll,而这个文件是根据AutoBox.cs创建而来的,换句话说,如果我们改变了AutoBox.cs的代码,那么 AutoBox.dll文件也要随之改变,那么在makefile文件中就包含了类似的信息以及将AutoBox.cs转换成AutoBox.dll文件的代码。

我们就以AutoBox.dll和UseBox.exe为实例说明,以下是创建的步骤:

首先创建一个makefile文件,存放在和你的source 文件一个目录下。

将以下代码输入到makefile文件中。

  1 .   all: AutoBox.dll UseBox.exe
 
2 .
 
3 .   AutoBox.dll: AutoBox.cs
 
4 .     csc  / t:library AutoBox.cs
 
5
 
6 .   UseBox.exe: UseBox.cs
 
7 .     csc  / r:AutoBox.dll UseBox.cs
 
8 .
 
9 .   clean:
10 .     - del  * .exe
11 .     - del  * .dll


注明:代码中的每行前面的数字不是代码的一部份,只是为了方便代码的解释

1行:all代表所有的目标文件(targes),在这个例子中,只有AutoBox.dll和UseBox.exe

3-4行:代表target所依靠的文件以及编译target的方法,在这个例子中,AutoBox.dll是随着AutoBox.cs的改变而改变的,也就是说,一旦AutoBox.cs的代码改变了,那么AutoBox.dll文件也要随之改变。而第4行则是将AutoBox.cs编译成library文件的方法。

6-7行:完全类似第3-4行的代码,而第7行则是将主程序文件编译成可执行文件的方法。

9-11行:clean类似all,然后它并不去鉴别输出的文件,它只是指明了将清楚除source文件以外其它的文件,
正如第10-11行所写,这个makefile文件将会清楚除了AutoBox.dll和UseBox.exe文件之外其它的exe文件和dll文件。

在上面的代码输入完之后,存盘退出,然后记的要将makefile放入和你的project一个目录下面。然后直接执行nmake 就可以了。nmake会自动寻找makefile文件,如果你的makefile文件有代码错误,nmake也会打出相应的错误信息,让你修改。如果一切正常,nmake则会自动按照makefile中所输入的代码,进行编译。并最终输出二个文件:AutoBox.dll和UseBox.exe

这时候,有人就会问,那我直接将编译所需的C# command写入一个.bat文件不就行了,为什么要这么麻烦使用nmake呢?呵呵,你试一下你就知道了,如果你将c# command写入一个.bat文件,你也可以得到类似的功能,然后当你运行这个.bat文件时,你将会将不必要重新编译的文件也编译了,这完全是浪费资源的表现,而且如果只是个小程序也就罢了,如果是个大的项目,呵呵,你就只能盯着屏幕看,到底是哪个文件出了错,这一盯,估计也得好几十分钟吧。。这简直就是自杀。。
比如说:

你将以下C# command写入run.bat中:

csc /t:library AutoBox.cs
csc /r:AutoBox.dll UseBox.cs

这样你每次运行run.bat,程序会首先编译AutoBox.cs然后再编译UseBox.cs,第一次执行,没问题,然而如果你修改了 UseBox.cs文件,需要重新编译,这个run文件则会将不需要编译的AutoBox也重新编译一次。然而,使用nmake就不会有这种问题了。。

一旦你执行了nmake,程序会自动检测,AutoBox.cs和UseBox.cs这二个文件有哪个文件是被修改了,然后它将会把修改的那个文件编译。比方说,程序检测到UseBox.cs文件已经被修改过,于是它只将UseBox.cs文件重新编译,而AutoBox则没有进行任何动作。这样的话,将大大节约了时间,而且当编译一个大项目时,你也可以轻而以举的找出是哪个文件编译有误,哪个文件已经被修改等等。这也是为什么我一开始说,nmake应该在第一步就研究。。

============================================
ok,上面就是我这次学习nmake的成果,希望对朋友们有些帮助。。有错误的地方,还望能告诉一声,好让我不至于继续误导大家,呵呵。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值