皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

Qbs 2.5 发布

Qbs 2.5 发布

Qbs 构建工具版本 2.5 可用。

Qbs 是一个社区驱动的、与语言无关的构建自动化系统。它速度很快,并提供一种基于 QML 的易于学习的语言。

突出特点

语言改进

在编写 qbs 项目文件时,一个长期存在的烦恼是,您经常被迫在不同的上下文中重复相同的条件。例如:

CppApplication {
    Depends { name: "ib"; condition: qbs.targetOS.contains("darwin") }
    Properties {
        condition: qbs.targetOS.contains("darwin")
        cpp.defines: "DARWIN_FEATURES"
    }
    Group {
        name: "darwin-specific files"
        condition: qbs.targetOS.contains("darwin")
        files: [ /* ... */ ]
    }
}

从 qbs 2.5 开始,你可以通过使用 common condition 作为中心分组标准来清理这个有点混乱的结构:

CppApplication {
    Group {
        name: "darwin-specific"
        condition: qbs.targetOS.contains("darwin")
        Depends { name: "ib" }
        product.cpp.defines: "DARWIN_FEATURES"
        files: [ /* ... */ ]
    }  
}

上面的产品演示了 Group 项的两个新功能:

  • 它现在可以包含其他项,即 、 和 ,其条件也隐式应用于这些子项。DependsFileTaggerRuleScanner
  • 它现在可以像一个 Item 一样,有条件地为产品中的所有工件设置模块属性。Properties

说到属性项目,这个项目也得到了一个长期需要的大修。最重要的是,它们的条件现在可以重叠,因此其中的几个可以构成同一个 list 属性:

Properties {
    condition: qbs.targetOS.contains("unix")
    cpp.includePaths: "myincludes/unix/common"
}
Properties {
    condition: qbs.targetOS.contains("linux")
    cpp.includePaths: "myincludes/unix/linux"
}

在上面的示例中,为 Linux 目标(也是 Unix)构建将使用两个包含路径,而 FreeBSD 目标将仅使用第一个路径。在早期版本的 qbs 中,第二个属性将不起作用,因为最多使用了一个替代项。

请注意,这意味着顶级 (列表) 属性绑定充当“隐式 else 情况”不再有意义;相反,它应该无条件地贡献 property value。为了向后兼容,将逐步引入此特定功能。依赖旧的行为会在 qbs 2.6 中触发警告,之后语义会发生变化。指定回退值的新方法是使用 condition 设置为 的项目。Propertiesundefined

有关更多语言改进,请查看更改日志

更多 Qbs 2.5 released