在DUB中,如何基于可选依赖项有条件地编译代码?

时间:2017-08-15 16:42:56

标签: d dub

如果我有一个带有可选依赖项的基于DUB的项目,那么如何使它成为一些代码(无论是模块还是版本(...){...}块)只有在依赖时才会被编译被选中了?有没有办法根据依赖关系是否存在来定义版本标识符?

我已经读过关于"可选"和"默认" "依赖"的属性标记为here的标记。这允许我将依赖项定义为可选的,但如果我不能对我的代码进行版本化以反映所选择的依赖项,那么它就缺乏了解。

2 个答案:

答案 0 :(得分:2)

也许你可以,我不确定,但似乎你可以使用这样的东西:

version(Have_name_of_dependency)

因此,如果您的可选依赖项是sdlang -d,则可以使用

Have_sdlang_d

here

相同

这是基于配音代码的this部分

答案 1 :(得分:0)

除了使用version(foo)块并要求人们在他们的dub.sdl中使用versions: "foo"之外,您还有另外一个选项。它很邋,,但它会起作用。

如果您的代码是模板,您可以将相关内容包装在:

template HasVibe() 
{
    enum HasVibe = 
        is(typeof(() { import vibe.d; } ));
}

template Foo(T) if (HasVibe!())
{
    // your code here
}

如果 模板,您可以将其转换为模板:

template log() if (HasVibe!())
{
    import vibe.core.log : logDebug;
    alias log = logDebug;
}

未经测试,但它可能会有所帮助。