在 DUB 中,如何根据可选依赖项有条件地编译代码?
In DUB, how do I conditionally compile code based on optional dependencies?
如果我有一个带有可选依赖项的基于 DUB 的项目,我该如何使某些代码(无论是模块还是版本 (...){...} 块)仅在以下情况下才被编译选择依赖项?有没有一种方法可以根据依赖项是否存在来定义版本标识符?
我已经阅读了 "dependency" 标签的 "optional" 和 "default" 属性,如 here 所述。这允许我将依赖项定义为可选的,但是如果我不能对我的代码进行版本控制以反映所选的依赖项,它就会缺乏牙齿。
也许你可以,我不确定,但你似乎可以使用这样的东西:
version(Have_name_of_dependency)
因此,如果您的可选依赖项是 sdlang-d,您可以使用
Have_sdlang_d
与here
相同
这是基于this部分配音代码
除了使用 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;
}
未经测试,但在紧要关头可能会有帮助。
如果我有一个带有可选依赖项的基于 DUB 的项目,我该如何使某些代码(无论是模块还是版本 (...){...} 块)仅在以下情况下才被编译选择依赖项?有没有一种方法可以根据依赖项是否存在来定义版本标识符?
我已经阅读了 "dependency" 标签的 "optional" 和 "default" 属性,如 here 所述。这允许我将依赖项定义为可选的,但是如果我不能对我的代码进行版本控制以反映所选的依赖项,它就会缺乏牙齿。
也许你可以,我不确定,但你似乎可以使用这样的东西:
version(Have_name_of_dependency)
因此,如果您的可选依赖项是 sdlang-d,您可以使用
Have_sdlang_d
与here
相同这是基于this部分配音代码
除了使用 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;
}
未经测试,但在紧要关头可能会有帮助。