在VS2008环境下使用Scons编译NSIS

花了一个晚上的时间好不容易把NSIS的源代码编译过了,设置环境真是不容易啊。

 

首先解释一下为什么要编译NSIS的源代码,因为有时要修改NSIS的设置,比如让NSIS支持LOGGING啊,加大字符串长度,虽然这两个在网站上有下载编译好的,但是如果有别的设置要更改呢?如果要自己写个插件描器呢?都要把NSIS的源代码重新编译一遍。很不可理解。不过目前也只能这样。

 

 

根据文档上的要求,编译NSIS要有PythonScons。下吧。Python的最新版是3.0.1Scons的最新版是1.2.0。都下来最新版,安装好了,按文档上的要求,在源代码所在目录下输入“scons”,结果CMD不认为这是个命令。估计是环境变量没有自动设置好。好不容易找到这个scons,不太敢相信,原来就是一个bat,在bat里调用了python的代码。

 

PythonPython"scipts都加到环境变量PATH里,OKScons认识了,还是不过,报语法错误,是python解释器报的一个py文件的语法错误。心想有可能是自己的Python太新了,Python 3Python 2的语法还是有一定差别的。不过这年头Python 3.1都快发布了,scons还要用2.x的版本?到scons网站上看看,的确也说了“SCons will work with any version of Python from 1.5.2 or later.”那3.0.1应该是可以的吧。不过还是报着一线希望,又安装Python 2.6.1。实践证明scons1.2.0的确还不支持Python 3

 

现在不报py的语法错误了,改报NSIS源代码的编译错误了,说XXXX.lib或是说xxx.h报不到。

 

估计又是哪个环境变量没有设置,这个环境变量也不是自己能YY的,就上网找。在WinAmp论坛上找到了有人有相同的问题,从后面的讨论可以看出的确是环境变量的问题,而且已经有人作为BUG报给了scons,说文件应该自动找到的呀,scons也很高效,马上就在Bug Trace的网站上回复了临时解决办法——改改scons的源代码就行了。汗颜……好在scons是用解释型语言编写的,改完了不要重新编译。解决方法如下:

 

Index: src/engine/SCons/Tool/msvc.py

===================================================================

--- src/engine/SCons/Tool/msvc.py (revision 3756)

+++ src/engine/SCons/Tool/msvc.py       (working copy)

@@ -554,7 +554,9 @@

     # base installation from the registry and deduce the default

     # directories.

     version_num, suite = SCons.Tool.msvs.msvs_parse_version(version)

-    if version_num >= 8.0:

+    if version_num >= 9.0:

+        return (os.environ['INCLUDE'], os.environ['LIB'], os.environ['PATH'])

+    elif version_num >= 8.0:

         suite = SCons.Tool.msvs.get_default_visualstudio8_suite(env)

         defpaths = _get_msvc8_default_paths(env, version, suite, use_mfc_dirs)

     elif version_num >= 7.0:

 

其实说白了就是scons还不支持VS2008,只支持VS2005。开发者也表示会在1.3版中提供VS2008的支持——天知道1.3什么时候发布,看样子是要在VS2010之后了。如果不是很明白上面的文件DIFF的结果可以去网站上看,其实一样的。

 

从解决方案中可以看到,还要设置两个环境变量“INCLUDE”和“LIB”,分别设置为Program Files"Microsoft Visual Studio 9.0"VC里的includelib

 

这样头文件应该也找到了,库文件应该也找到了,为了防止意外,这次不直接用CMD了。用Windows SDKCMD SHELL,它会自动地加入一些变量。让各种文件更容易被找到。

 

这一次终于Build过了90%,还有10%还是过不了,就是NSIS Menu,其实文档上也说了要build NSIS menu要安装wxWidgets。其实目的已经基本完成了,NSIS的主体和插件都已经可以编译了,这个NSIS MENU是可有可无的,不过为了看上去舒服一些,还是让它过吧。同样安装了wxWidgets的最新版2.8.10,同样的要设置环境变量。根据文档上的提示,要先运行一下NSIS源代码目录下的Contrib"NSIS Menu"wx"wxbuild.bat(同样要在CMD SHELL里运行)以生成一些必要的库。然后再在NSIS源代码的根目录下运行scons

 

如果出现什么问题,可以参考下面二个论坛上的主题。

 

Problem building the NSIS source

Nsis 2.25 - compilation problem

 

至此,NSIS编译成功。用VS2008编译出来的文件的大小,和官方下载的大小还是有一定差别的,可能是因为官方打包用的是VS2005的原因吧。理论上自己编译出来的这个应该更好一些的吧。

posted on 2009-04-05 21:42  南柯之石  阅读(3893)  评论(1编辑  收藏  举报

导航