我正在尝试构建一个项目,在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(); }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 ..手动将其添加到构建命令中:
dmd bin\exemple.exe src\exemple.d -IC:\path\to\my\project\src bin\b.obj现在起作用了。
太棒了。但是如果我们有很多额外的d文件和复杂的文件夹结构呢?
,它怎么能被原子化?
当我发现DMD并没有自动完成这一切时,我非常惊讶。也许,我只是做错了。
发布于 2014-05-27 12:20:40
您不需要单独构建一个/b/d。但是,您必须将所有源(或对象)文件传递给dmd。dmd没有计算出依赖项。
看看rdmd。它是一个工具,它确实计算出依赖项,然后在所有这些依赖项上运行dmd (然后它默认运行可执行文件,--build-only会防止这种情况)。它附带了dmd版本。
https://stackoverflow.com/questions/23888440
复制相似问题