zoukankan      html  css  js  c++  java
  • 在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的原因吧。理论上自己编译出来的这个应该更好一些的吧。

  • 相关阅读:
    Java学习开篇
    《我的姐姐》
    世上本无事,庸人自扰之
    这48小时
    补觉
    淡定
    es java api 设置index mapping 报错 mapping source must be pairs of fieldnames and properties definition.
    java mongodb groupby分组查询
    linux 常用命令
    mongodb too many users are authenticated
  • 原文地址:https://www.cnblogs.com/nankezhishi/p/buildnsis.html
Copyright © 2011-2022 走看看