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 项的两个新功能:
- 它现在可以包含其他项,即 、 和 ,其条件也隐式应用于这些子项。
Depends
FileTagger
Rule
Scanner
- 它现在可以像一个 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 设置为 的项目。Properties
undefined
有关更多语言改进,请查看更改日志。