我可以指定min Dub或DMD版本吗?

时间:2016-07-27 00:59:19

标签: d dmd dub

人们一直在尝试使用旧版本的Dmd和Dub(0.9.2而不是1.0.0)构建我的项目,但它不起作用。我可以在dub.json文件中指定min required dub version?

2 个答案:

答案 0 :(得分:3)

不幸的是你做不到。有关详细信息,请参阅this issue。请在那里制造噪音; - )

现在有两个想法如何解决这个问题。

1)在主语句中使用static if

int main()
{
   static if (__VERSION__ < 2069)
   {
       pragma(msg, "Your DMD version is outdated. Please update");
       return 1;
   }
   ...
}

2)使用preGenerateCommands = ['rdmd checkversions.d']

int main()
{
    import std.process : execute;
    import std.stdio : writeln;
    auto ver = execute(["dub", "--version"]);
    if (ver.status != 0)
    {
        writeln("Error: no dub installation found.");
    }
    else
    {
        import std.conv : to;
        import std.regex : ctRegex, matchFirst;
        auto ctr = ctRegex!`version ([0-9]+)[.]([0-9]+)[.]([0-9]+)`;
        auto r = ver.output.matchFirst(ctr);
        assert(r.length == 4, "version not found");
        int major = r[1].to!int, minor = r[2].to!int, patch = r[3].to!int;
        if (major < 2)
        {
            writeln(minor);
            return 1;
        }
    }
}

答案 1 :(得分:0)

如今,dub 允许您指定工具链要求。见https://dub.pm/package-format-json.html#toolchain-requirements

dub.json 中,您可以:

{
    "name": "my-package",
    "toolchainRequirements": {
        "dub": ">=1.14.0",
        "frontend": ">=2.069",
        "gdc": "no"
    }
}