简体   繁体   中英

In DUB, how do I conditionally compile code based on optional dependencies?

If I have a DUB-based project with an optional dependency, how to I make it so that some code (be it modules or a version(...){...} block) only gets compiled if the dependency is chosen? Is there a way I can make a version identifier defined based on whether the dependency is present or absent?

I have already read about the "optional" and "default" attributes of the "dependency" tag as documented here . This allows me to define a dependency as optional, but it lacks teeth if I can't version my code to reflect the dependencies chosen.

Maybe you can, I am not sure but it seems you can use something like this:

version(Have_name_of_dependency)

So if your optional dependency would be sdlang-d you could use

Have_sdlang_d

Same as here

This is based on this part of dub code

Besides using a version(foo) block and asking people to use versions: "foo" in their dub.sdl, you have one other option. It's cruddy, but it would work.

If your code is a template, you can wrap the relevant stuff in:

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

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

If it's not a template, you can turn it into a template:

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

Untested, but it might help in a pinch.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM