最好的D语言界面库DWT2的下载和编译

今天早上用Sylpheed上D语言的新闻组,发现最好的D语言界面库DWT的主要贡献者Frank Benoit发表了一个帖子,新的DWT2已经可以使用了。

DWT2和原来的DWT有什么不同呢?

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

DWT重命名了SWT的模块名,比如在SWT模块就改成了DWT模块:

DWT.CENTER // DWT
SWT.CENTER  //DWT2  
import dwt.widgets.Button;   //DWT
import org.eclipse.swt.widgets.Button;  ///DWT2

这样的重命名其实是没有必要的,在DWT和SWT同步更新时,增加了不少麻烦。Frank在新闻组征求了大家的意见,一致认为保持SWT的模块名为好,于是Frank就启动了DWT2的工作。

DWT2 的导入

DWT2 要用hg来导入,首先按照这篇贴子安装hg:
http://bbs.d-programming-language-china.org/thread-789-1-1.html

DWT2 Windows版本为例, 进入 …\dmd\src\ 目录, 点右键,选择 “tortoiseHg”, “Clone a Repository”, 引用:

Source Path: http://hg.dsource.org/projects/dwt2
Destination Path: ...\dmd\src\dwt2

然后点击 “Clone”, 要注意,Destination Path要换成你的实际路径。

在更新时,进入 …\dmd\src\dwt2 目录,点击右键,选择 “tortoiseHg”, “Synchronize…”, 再点"Pull". 完了,再点击右键选择 “tortoiseHg”, “Checkout Revision”.

命令行下是这样:

First get:
    hg clone http://hg.dsource.org/projects/dwt2
To get later changes from the server
    hg pull -u

一个好消息是,Frank已经在为DWT2的Phobos+D2版本而努力,如果你喜欢Phobos和D2,可以联系Frank, 为DWT2贡献代码。

 D语言界面库DWT的编译

原来的DWT一般用DSSS编译,D语言中国   https://www.d-programming-language-china.org/ 已经作过介绍:
http://bbs.d-programming-language-china.org/thread-789-1-1.html

DWT2 Frank推荐用Ruby的Rake编译。Rake的意思是Ruby Make,一个用ruby开发的代码构建工具。Rake的英文意思是耙子,一种很朴实的劳动工具。真的是很贴切,Rake正是一个功能强大、勤勤恳恳的劳动工具。

Ruby的下载: http://www.ruby-lang.org/en/downloads/
Rake的下载: http://rake.rubyforge.org/

我下载的是Ruby 1.9.1-p0 Binary(Windows),Rake 0.83.

安装好Rake后,进入dwt2目录,运行命令行Rake进行编译

Frank 是基于DMD 1.041, Tango svn 0.99.8编译DWT2的。从DMD1.040开始:

Separated bin and lib directories into windows, linux, and osx.

No longer need to download dmc to use the windows version.

因此要把Windows下环境变量中dmd bin的path由原来的 …dmd\bin 改成 …dmd\windows\bin

并且Windows下已经不再需要单独下载dmc了。

备份dmd\bing\sc.ini, tango\lib目录下的已经编译好的tango 0.99.7 revison 4052 的lib文件,然后导出最新的tango revison 4422. 点击bat文件重新编译tango lib.

DMD 1.041的编译器配置文件sc.ini的默认

[Version]
version=7.51 Build 020

[Environment]
LIB="%@P%\..\lib";\dm\lib
DFLAGS="-I%@P%\..\..\src\phobos"
LINKCMD=%@P%\link.exe

要作适当修改。

在dwt2目录下运行Rake编译出大量obj文件在obj目录里,编译速度很快。

用下面的命令把obj目录下的所有文件名导出为all.txt, 以,分隔:

ls -m > all.txt

再把,替换掉,在vim里用:%s/\n//g替换掉换行符 然后写个Makefiel:

...
src=aaaa.obj \
org-osgi-framework-Bundle.obj org-osgi-util-NLS.obj
dwt2.lib:
    lib -c dwt2.lib $(src)

再运行mingw32-make.exe编译,结果:

ageBook.obj org-osgi-framework-Bundle.obj org-osgi-util-NLS.obj, ...) failed.
make (e=87): The parameter is incorrect.
mingw32-make: *** [dwt2.lib] Error 87

上网查了一下,是因为Windows下命令行参数长度的限制的原因。再试用lib直接编译,用D语言的make工具编译,都通不过。暂时没有办法。看来用DWT2为时尚早,以后再说吧。把备份的sc.ini恢复,把备份的tango lib文件恢复,于是,又回到了dmd 1.037。

再次编译DWT2 (20090324)

Frank再次更新了dwt2, 于是再次编译dwt2

  1. svn更新tango到最新版, 并点击bat文件编译出库文件

  2. 更新D语言编译器DMD到1.041(之前先备份好dmd\bin\sc.ini)

  3. 更新D语言编译器dmd的全局配置文件:dmd\windows\bin\sc.ini:

    [Version]
    version=7.51 Build 020
    
    [Environment]  
    LIB="%@P%\..\..\src\dwt2\lib;%@P%\..\..\tango\lib;%@P%\..\..\src\other\dwin\lib;%@P%\..\lib"  
    DFLAGS="-I%@P%\..\..\tangobos;%@P%\..\..\src\dwt2\imp;%@P%\..\..\tango;%@P%\..\..\src\other" -version=Tango -defaultlib=tango-base-dmd -debuglib=tango-base-dmd-d -L+tango-user-dmd.lib+dwt-base.lib+org.eclipse.swt.win32.win32.x86.lib+org.eclipse.jface.lib+org.eclipse.core.jobs.lib+org.eclipse.core.commands.lib+org.eclipse.core.runtime.lib+org.eclipse.equinox.common.lib+org.eclipse.osgi.supplement.lib+zlib.lib+advapi32.lib+comctl32.lib+comdlg32.lib+gdi32.lib+kernel32.lib+shell32.lib+ole32.lib+oleaut32.lib+olepro32.lib+oleacc.lib+user32.lib+usp10.lib+msimg32.lib+opengl32.lib+shlwapi.lib+dwin.lib "-J%@P%\..\..\src\dwt2\res;%@P%\..\..\src\dwt2\org.eclipse.swt.win32.win32.x86\res"  
    LINKCMD=%@P%\link.exe
    
    我们把常用的lib都加到dmd全局配置文件sc.ini中去。如果不在sc.ini设置,就需要手动在每个项目的编译命令中添加要用到的lib。
  4. 把…\dmd\windows\bin加入到windows path环境变量中去

  5. 在dwt2目录运行命令命令编译出库文件(我用的是Rake 0.83, Ruby 1.91):

     Rake
    
    如果是debug编译,则是:
    Rake DEBUG=1
    
    运行命令编译出示例程序,发现和dmd 1.037 dwt-win相比,exe文件大约增大了500KB:
    Rake swtsnippets
    Rake jfacesnippets
    
    值得注意的是,dwt2把D语言接口文件, 也就是.di文件,都放到了imp目录下,这样我们只要在编译选项-I中加上imp目录,编译速度就会更快。

看来dwt2确实可以用了。

https://www.d-programming-language-china.org/dwt2-xia-zai-bian-yi/
最好的D语言界面库DWT2的下载和编译

相关文章: