首页 文章

DMD:与链接和构建的误解

提问于
浏览
1

我正在尝试使用Windows中的DMD编译器本身(不使用IDE)构建项目 . 我发现自己几乎没有能力意识到关于链接的一些时刻 . 通常IDE会为我执行此操作 .

The structure of my project

project
├──bin
|   ├──exemple.obj
|   └──exemple.exe
└──src
    ├──a
    |  └──b.d
    └──exemple.d

exemple.d

import a.b;
void  main() { B obg = new B(); }

b.d

module a.b;
class B {
    private int i;
    public this() {i=0;}
    public void act() {i++;}
}

起初,使用命令构建起来似乎很容易:

cd C:\path\to\my\project
dmd bin\exemple.exe src\exemple.d -IC:\path\to\my\project\src

但它只向我展示了一些错误按摩:

OPTLINK (R) for Win32  Release 8.00.13
Copyright (C) Digital Mars 1989-2010  All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
bin\exemple.obj(exemple)
 Error 42: Symbol Undefined _D1a1b1B7__ClassZ
bin\exemple.obj(exemple)
 Error 42: Symbol Undefined _D1a1b1B6__ctorMFZC1a1b1B
--- errorlevel 2

最后我猜想obj文件丢失了 . 我用命令做了 manually

cd bin
dmd ..\src\a\b.d -c
cd ..

manually 将其添加到我的build-command中:

dmd bin\exemple.exe src\exemple.d -IC:\path\to\my\project\src bin\b.obj

现在它有效 .

大 . 但是,如果我们有更多的额外d文件和复杂的文件夹结构呢?

How could it be atomised?

当我发现DMD没有自动完成所有这些操作时,我非常惊讶 . 也许,我只是做错了 .

1 回答

  • 2

    您不必单独构建/ b.d.但是您必须将所有源(或对象)文件传递给dmd . dmd没有弄清楚依赖关系 .

    看看rdmd . 它是一个确定依赖关系然后在所有这些上运行dmd的工具(然后它默认运行可执行文件, --build-only 阻止它) . 它附带了dmd版本 .

相关问题