
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
有关更多语言改进,请查看更改日志。
Linuxeden开源社区