Windows DMD:对链接和构建的误解

Windows DMD:对链接和构建的误解,windows,d,dmd,Windows,D,Dmd,我正在尝试在Windows中使用DMD编译器本身(没有IDE)构建一个项目。我发现自己几乎无法意识到一些关于链接的时刻。通常IDE会为我做这件事 我的项目结构 project ├──bin | ├──exemple.obj | └──exemple.exe └──src ├──a | └──b.d └──exemple.d 示例d import a.b; void main() { B obg = new B(); } module a.b; class

我正在尝试在Windows中使用DMD编译器本身(没有IDE)构建一个项目。我发现自己几乎无法意识到一些关于链接的时刻。通常IDE会为我做这件事

我的项目结构

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

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

import a.b;
void  main() { B obg = new B(); }
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文件不见了。我使用以下命令手动创建了

cd bin
dmd ..\src\a\b.d -c
cd ..
然后手动将其添加到我的build命令中:

dmd bin\exemple.exe src\exemple.d -IC:\path\to\my\project\src bin\b.obj
现在它开始工作了

太好了。但是如果我们有很多额外的d文件和复杂的文件夹结构呢

它是如何被原子化的?


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

您不必单独构建a/b.d。但您必须将所有源(或对象)文件传递给dmd。dmd没有找出依赖项

看一看。这是一个工具,它可以找出依赖项,然后在所有依赖项上运行dmd(然后默认情况下运行可执行文件,
--build only
)。它随dmd发行版而来