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

  • 相关阅读:
    五步搞定Android开发环境部署
    Android 内存监测工具 DDMS --> Heap
    Android自动化测试之MonkeyRunner
    monkeyrunner功能函数
    python基础语法(4)
    python基础语法(3)
    python基础语法(2)
    执行插件超过2分钟超时错误,如何办?
    Dynamics 365出现数据加密错误怎么办?
    Dynamics 365执行操作报SQL Server已超时,更改这个超时设置的方法
  • 原文地址:https://www.cnblogs.com/nankezhishi/p/buildnsis.html
Copyright © 2020-2023  润新知