如何在DUB中制作配置,该配置将带有主函数的多个输入D文件转换为多个输出可执行文件



我可以想到至少有几个用例或方案:

  • 构建多个示例程序的"示例"配置。
  • 一个带有客户程序和主机程序的项目。
  • 一个带有一个主要程序和一些相关实用程序程序的项目(例如:GCC(。

更一般而言,如果项目具有具有相同或相似依赖项集的多个输出可执行文件,那么一次构建它们可能是有意义的。用户可以比弄清楚如何使配音创建所需的可执行文件要容易得多(他们可能不是熟悉DUB的D开发人员(。作为D开发人员,这对我也很方便,因为我可以运行更少的构建命令来获得我想要的东西。

举例来说,我可能有这样的项目布局:

dub.json
.gitignore
source/common/foo.d               (Code called by all examples)
source/examples/simple_example.d  (Build input with main function)
source/examples/complex_example.d (Build input with main function)
source/examples/clever_example.d  (Build input with main function)
bin/simple_example.exe            (Output executable)
bin/complex_example.exe           (Output executable)
bin/clever_example.exe            (Output executable)

另一个项目看起来像这样:

dub.json
.gitignore
source/common/netcode.d           (Code called by all programs)
source/common/logic.d             (Code called by all programs)
source/executables/host-daemon.d  (Does privileged things for the server)
source/executables/server.d       (Unprivileged network endpoint)
source/executables/client.d       (Queries the server)
bin/host-daemon                   (Output executable)
bin/server                        (Output executable)
bin/client                        (Output executable)

在任何一个项目中,我都想用一个配音的单个调用来构建所有可执行文件。理想情况下,由于输入和输出的相互关联性质。

似乎可以做到这一点,但是从一个Dub.json文件进行管理"通常是灰心的":

sub Directories/component1和/component2然后包含普通软件包,可以称为" mylib:component1"one_answers" mylib:component2",来自外部项目。要参考同一存储库中的子软件包,请使用"*"版本规范符。

也可以在根软件包文件中定义子软件包,但请注意,将多个子软件包的源代码放入同一源文件夹是generally discouraged。这样做可以导致隐藏的依赖关系对"依赖"部分中未明确说明的子软件包。然后,这些隐藏的依赖性可能会导致构建错误与某些可能难以理解的构建模式或依赖树相结合。

DUB可以一口气构建多个可执行文件,如果是,则最建议的方法是什么?

我设法使用配置,没有子书。

首先,您将所有主要功能都带有versions指数。

假设您有3个不同的文件,每个文件都有自己的主。

One.D:

....
versions(one)
void main() {
    ....
}

二。D:

....
versions(two)
void main() {
    ....
}

三人:

....
versions(three)
void main() {
    ....
}

在您的配音项目文件中(我在此处使用SDL格式(,您可以定义三个配置,以便每种配置都定义一个不同的版本,并输出到其他输出文件。

dub.sdl:

....
configuration "one" {
    versions "one"
    targetType "executable"
    targetName "one"
}
configuration "two" {
    versions "two"
    targetType "executable"
    targetName "two"
}
configuration "three" {
    versions "three"
    targetType "executable"
    targetName "three"
}

如果您只调用dub build,它将使用第一个配置,但是可以通过其他配置:

dub build --config=two

"子弹旨在从外部模块化包装"。

相反,您应该能够创建多个配置来完成自己想做的事情,例如Dub本身(它定义了多个库,但您可以轻松执行多个可执行文件(。

我不确定是否有一次命令一次构建所有配置。--combined也许(文档尚不清楚,但我认为这实际上是用于使用单个编译器调用而构建所有源文件,而不是一个一个一个编译器,而是一个一个一个编译器(。

最新更新