如何编译 D-Phoenix 库

近日有朋友问及如何编译和使用 D-Phoenix 库。于是就有了这篇文章的存在。

这个年代,没有 IDE 进行编码编译是痛苦的。所以,博主将主要介绍使用 Poseidon 来编译 D-Phoenix 库(为啥子要讲 Poseidon,而不是 CodeBlocks 之类的 IDE。哈,因为 Poseidon 是国产货)。

首先,D 语言编译器是必备武器。D-Phoenix 库推荐使用 DMD 2.019 for Win32编译器。你可以按照下面的方法安置好 D 语言编译器:

然后,从 http://www.dsource.org/projects/poseidon/changeset/head/trunk?old_path=%2F&format=zip 处获得最新版 Poseidon IDE。

接下来,在你指定的位置新建文件夹 d-phoenix 。然后从 http://d-phoenix.googlecode.com/files/Phoenix%20v0.5.1.zip 处下载 D-Phoenix 源码,并解压缩到刚才新建的 d-phoenix 目录下。当然,你也可以从 http://d-phoenix.googlecode.com/svn/trunk/ 处使用 SVN 检出。如图 1 所示:

SVN Check Out 图1 SVN 检出示意图

检出完毕之后,可以如图 2 所示的目录结构:

Directory 图2 D-Phoenix 目录示意图

 

 

这时,打开刚才下载的 Poseidon IDE,从 File 菜单下选择 New Project,这时会弹出 Project Property 窗口。如图 3 所示:

Project Property 图3 项目属性窗口

现在开始设置项目属性:

  • 在 Load Style 上,选择 By Project Path。
  • 在 Project Name 上填写 D-Phoenix。
  • 在 Project Path 上选择我们刚刚的 d-phoenix\source 目录。
  • 在 Type 上选择 Static Library。其实这里选择什么都无所谓,因为编译时不会用到这个选项,后面会讲到。
  • 其他选项,我们不用去管。

设置好之后,你会看到如图 4 所示的结果:

Project Result 图4 项目属性设置

 

这样,就创建了 D-Phoenix 项目。但是,你会看到里面并没有文件。这需要我们自己动手把项目中的文件按照目录层次一一添加过来。建立项目以后,就不需要这么繁琐了。在 Source 下添加完文件之后,会看到如图 5 所示的结果:

Source 图5 源码层次结构示意图

这样,D-Phoenix 库项目就建立好了。接下来开始编译项目。这里需要说明的是,我们不使用 Poseidon IDE 自带的编译选择。而是使用外部工具自己编写 DMD 编译器编译指令。

首先,选择 Poseidon 工具栏上的如图 6 所示的小图标:

Tool 图6 外部工具图标

点击这个图标旁边的下拉按钮,选择 Customize… 。这时弹出 External Tool Configuration 窗口。删除所有的外部工具,我们重新添加所需要的工具。点击 Add 按钮,按照如下方式配置该工具:

  • 在 Name 上,填写 DMD (Debug + UnitTest) - Static Library。这意味着我们正在使用 DMD 编译器生成 debug 模式下的静态库,而且在编译过程中,会自动进行单元测试。
  • 在 Command 上,填写 DMD 编译器所在的位置。按照如上所述,这里应当是 C:\dmd\bin\dmd.exe 。
  • 在 Arguments 上,填写 $(ProjectAll) -lib -g -c -unittest -debug -ofPhoenix.lib 。
  • 在 Intial Dir 上,填写 $(ProjectDir) 。
  • 分别选中 Capture Output,Hide Window,Save Files First 。

设置完成后,如图 7 所示:

Debug Static Library 图7 配置 DMD 编译器

同理,我们可以配置 release 模式的静态库 DMD 编译命令和在控制台输出的 debug 模式 DMD 编译命令。分别如图 8 和图 9 所示:

Release Static Library 图8 配置 DMD 编译器

Console 图9 配置 DMD 编译器

现在是时候编译 D-Phoenix 库了。我们选择 DMD (Debug + UnitTest) - Static Library 工具编译一下,看能不能成功。如果成功,你会在 d-phoenix\source 目录下看到生成的 Phoenix.lib 静态库,这是 Debug 版的静态库。如果不成功,编译器会报错,这就需要你仔细排查了。你还可以试试其他编译模式,祝你成功,:) 。图 10 是在 release 模式下编译的 Phoenix.lib 截图:

Phoenix 图10  在 release 模式下的 Phoenix.lib

到这一步,已经大功告成。接下来,我来简单的说下如何使用 D-Phoenix 提供的 API,更详细的信息可以参考 API 文档或者查看单元测试代码。

比如大家都很常用的可扩展数组(指的是泛型版)。JDK 提供的是 ArrayList<T>,.NET 提供的是 List<T>,STL 提供的是 vector<T>。在 D-Phoenix 库中提供的可扩展数组是 ArrayList(T),它位于 system.collections.ArrayList 模块中。下面是示例代码(其实是从单元测试里拷贝过来的,呵呵):

//test insert()
auto stringList = new ArrayList!(string)();
with(stringList)
{
    insert(0, "a");
    insert(0, "b");
    insert(1, "c");
}

assert( stringList.count == 3 );
assert( stringList[0] == "b" );
assert( stringList[1] == "c" );
assert( stringList[2] == "a" );

auto array = [55,50,22,80,56,52,40,63];
auto list = new ArrayList!(int)(8);
foreach( i; array )
{
    list.add(i);
}
//test insertRange()
auto count = list.count;
auto newArray = [1,2,3];
auto newRange = new ArrayList!(int)(3);
foreach(i; newArray)
{
    newRange.add(i);
}

list.insertRange(1, newRange);

assert( count+3 == list.count );
assert( list[0] == 55 );
assert( list[1] == 1 );
assert( list[2] == 2 );
assert( list[3] == 3 );
assert( list[4] == 50 );

Well,就到这里吧。嗯,就到这里。

posted @ 2008-11-26 17:02  Angel Lucifer  阅读(1229)  评论(0编辑  收藏  举报