我正在尝试使用Windows中的DMD编译器本身(不使用IDE)构建项目。我发现自己几乎没有能力意识到关于链接的一些时刻。通常IDE会为我做这件事。
我的项目结构
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文件丢失了。我使用命令手动:
cd bin
dmd ..\src\a\b.d -c
cd ..
手动将其添加到我的build-command:
dmd bin\exemple.exe src\exemple.d -IC:\path\to\my\project\src bin\b.obj
现在它有效。
大。但是,如果我们有更多的额外d文件和复杂的文件夹结构呢?
怎么会被雾化?
当我发现DMD没有自动完成所有这些操作时,我感到非常惊讶。也许,我只是做错了。
答案 0 :(得分:2)
您不必单独构建/ b.d.但是您必须将所有源(或对象)文件传递给dmd。 dmd没有找出依赖关系。
看看rdmd。它是一个确定依赖关系然后在所有这些上运行dmd的工具(然后它默认运行可执行文件,--build-only
阻止它)。它附带了dmd版本。