Posted on 2005-01-21 01:20
Ray Chang 阅读(634)
评论(0) 编辑 收藏 所属分类:
.NET基础
哈哈,刚开始由于对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的成果,希望对朋友们有些帮助。。有错误的地方,还望能告诉一声,好让我不至于继续误导大家,呵呵。