用DSSS编译dwt2

自从开始用dwt2后,遇到了不少问题。dwt基于JAVA swt, 功能虽然非常强大,但dwt项目还刚开始,其中充满着各种bug。用不成熟的D语言,用更加不成熟的D语言库,就要为之付出代价。

到现在为止, dwt还是Frank一个人的项目,现在Frank还是很积极,但不知道能持续多久。dwt的模块数应该上千吧,光是每个模块打开关闭一次就要花大量时间。我有时在想,Frank花了多少时间在这个项目上呢?

https://www.d-programming-language-china.org/dsss-bian-yi-dwt2/

https://www.d-programming-language-china.org/dwt2-xia-zai-bian-yi/ 里我介绍了用Ruby Rake编译dwt2库的方法。用Ruby Rake实际上是用Rake搜索得到要编译的文件列表,然后和参数一起写到本地文件rsp,再用D语言编译器编译:

dmd @rsp

d语言编译器dmd1.038版以来一直有一个问题,就是编译出来的exe文件很大。小的示例程序会比用dsss编译出来的大500KB, 稍大点项目,exe体积可能增大到一倍以上。

我测试了一下,用dmd + Rake(lib), exe 9MB, 再换用 dmd + dsss(lib), exe是4MB。

因此,目前我的做法是,先用dsss把dwt2编译成静态库,再在程序中引用。

怎么样用dsss编译dwt2?

  1. 你要先下载和安装dsss
    参见 D语言中国   https://www.d-programming-language-china.org/ 有关文章的介绍。我现在用的是dsss 0.75版,更新的版本有bug,几乎要用1个月才能编译出dwt静态库(我没有试过,也许一年)。

  2. rebuild\default

    打开文件 etc\rebuild\default 设置:

    profile=dmd-win-tango
    
  3. oneatatime=yes

    找到rebuild的编译配置文件,一般是在etc\rebuild目录,找到文件dmd-win-tango,设置

    oneatatime=yes
    
  4. 设置pagesize

    dwt库模块超多,编译时间长,由于二进制文件格式的限制,要设置pagesize较大才能编译通过,默认是512, 我改成了1024 (或者2048)同样在dmd-win-tango中:

    cmd=lib -c -p1024 $o $i
    
  5. dsss.conf

    用dsss编译dwt静态库,要先写好一个名叫dsss.conf的文件。如果dwt2的目录是:

    D:\dwt2  
    
    dsss.conf的路径就是:
    D:\dsss.conf
    

    dsss.conf的内容是这样:

    #你可能要按照你的实际路径适当修改下面的内容  
    #by D语言中国    https://www.d-programming-language-china.org/
    [dwt2]
    
    exclude+=dwt2/org.eclipse.swt.gtk.linux.x86/* dwt2/org.eclipse.swt.snippets/* dwt2/org.eclipse.jface.snippets/*
    buildflags+=-Jdwt2/org.eclipse.swt.win32.win32.x86/res -Jdwt2/res
    
    type=library
    target=dwt2
    
    buildflags+=-full -version=Tango -I../tango -Idwt2/imp
    
    debugflags=-debug -g -unittest
    
    releaseflags=-release -O
    
    postbuild=copy dwt2.lib D:\tango\lib\dwt2.lib
    
  6. 执行编译

    在命令提示行下执行:

    D:\dmd\bin\dsss.exe build dwt2 -release
    D:\dmd\bin\dsss.exe build dwt2 -debug
    
    大约2个半小时,就可以编译出dwt2.lib (31.8MB) 或者debug-dwt2.lib, 在编译工程时引用dwt2.lib, 就可以使编译工程速度很快,编译出来的exe更小。
https://www.d-programming-language-china.org/dsss-bian-yi-dwt2/
用DSSS编译dwt2

相关文章: