编译D语言库DWin的简单方法

学习D语言有一段时间了,一直对D语言库、D语言工程的编译辅助工具不是太满意。

用过bud, dsss, 现在DWT2的Frank则用Ruby的Rake来编译DWT2库,难道又要去学Ruby,为了编译D语言又多学一种语言?

https://www.d-programming-language-china.org/bian-yi-dwin-fang-fa/

以前我一直用dsss编译D语言库DWin    http://dwin.d-programming-language-china.org/, 但是dsss的编译速度很慢,在D语言编译器dmd的早期版本,不能直接编译lib, 虽然对dsss的编译速度不满意,也只能用。

但现在dmd已经直接可以编译D语言库了,也就是加上-lib参数,而且编译速度很快,是dsss不能相比的。因此,我们现在需要的只是辅助dmd编译的第三方工具。

用GNU Make,可以用最简单的方法,最快的速度编译出DWin库。当然你也可以不编译,DWin的lib目录里就有:

dwin.lib  //release 
dwin-debug.lib //debug

你直接用就是了。不过我们始终要学会自己编译库。

要用GNU Make编译DWin, 可以按照以下步骤:

  1. 你要有一个GNU Make程序
    或者就用D语言编辑器SciTE4D   http://scite4d.d-programming-language-china.org/安装目录下的mingw32-make, 并把make所在路径加入到Windows path 环境变量。

  2. 准备好GNU find
    Windows下的移植版本是find.exe, 为避免和Windows自己的find重名,我改成了gnufind.exe, 同样要把gnufind.exe所在路径的目录加入Windows path 环境变量。

    gnu find工具包下载:
    http://gnuwin32.sourceforge.net/packages/findutils.htm

  3. 把下面的内容保存为:…\dwin\Makefile
    Windows下文件往往有后缀,Makefile是没有后缀的,也就是一个没有后缀的文本文件。

    # Author: D语言中国    https://www.d-programming-language-china.org/
    src =$(shell gnufind . -name "*.d")
    debug=-debug -g -w
    release=-release -O
    all : dwin.lib dwin-debug.lib
    dwin.lib : $(src)
        dmd $(src) -lib $(release) -oflib\$@
    dwin-debug.lib : 
        dmd $(src) -lib $(debug) -oflib\dwin-debug.lib
    
    要注意的是dmd前面有一个tab,而不是空格, 这是Makefile的基本常识,不太熟悉Makefile的还要找相关文章稍微了解一下。
  4. 运行命令提示行执行编译
    编译release版本是在dwin目录内,在命令行中打入:

     mingw32-make dwin.lib
    
    编译debug版本是在diwn目录内,命令行中打入:
    mingw32-make dwin-debug.lib
    

分秒之间,dwin编译完成,文件保存在lib目录内。

Windows命令行参数有长度限制,因为dwin模块不多,可以直接在命令行中编译。如果文件很多,就要把编译参数保存为response文件,再用下面的命令编译:

dmd @rsp

另外,发现直接用dmd 1.042编译DWin库,在链接时有时会发生optlink错误,用dsss 0.75和dmd 1.037编译出DWin库,使用时就没有问题。到底是什么原因还不知道。

https://www.d-programming-language-china.org/bian-yi-dwin-fang-fa/
编译D语言库DWin的简单方法

相关文章: