package.d 遇到问题

Having trouble with package.d

我在使用 D 的 package.d 功能时遇到了问题。我有我的 package.d 文件:

module dew;

public
import dew.util;

然后我有 util.d:

module dew.util;

struct Size
{
    int width;
    int height;
}

当我尝试在另一个项目中使用它时,它给我这个错误: 我知道这应该有效,因为 GitHub 上的项目使用它,特别是 bindbc-sdl.

您的代码是正确的。根据错误消息,我假设您使用 DUB 的项目布局可能如下所示:

  • 露水/
    • 配音.sdl/dub.json
    • 来源/
      • package.d
      • util.d

但是这是不正确的。默认情况下,DUB 仅使用导入文件夹而不是指定所有输入源文件,因此编译器会尝试从文件系统中的导入路径中发现文件。编译器在您的错误屏幕截图中转储了它搜索的导入路径。

相当于它现在所做的粗略编译器是(参见dub -v

dmd source/app.d -Isource -I../dew/source

您需要想象其中写入的路径对于编译器是不可见的,因此 dew/source/ 路径只是一些编译器无法解释的不透明字符串。现在,编译器在其搜索路径中看到的只是 package.d 和 util.d。但是,要从文件夹导入功能,它们需要与文件系统布局相对应,即您需要有一个名为 dew 的文件夹,您的文件存储在其中。

所以名为 dew.util 的模块将对应于 dew/util.d

而您的包裹 dew 将对应于 dew/package.d

所以对于您的配音项目,这基本上意味着您需要将所有源文件移动到

  • 露水/
    • 配音.sdl/dub.json
    • 来源/
      • 露水/
        • package.d
        • util.d

或者,由于文件顶部的 module 声明,可以逐个手动指定所有文件,编译器可以在其中查找它们,但是您失去了模块的便利性名称被映射到文件系统路径,这可能是其他社区制作的 D 源工具和 IDE 所期望的。在命令行上相当于

dmd source/app.d ../dew/source/dew/package.d ../dew/source/dew/util.d