新版QBS 2.0编译系统来了

QbS

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

Qbs 2.0 是一款免费开源的跨平台软件,用于管理软件开发流程,近日正式发布。它旨在支持使用各种编程语言(主要是 C/C++)编写的大型复杂项目。

新版本2.0 的版本号意义重大,因为它与新的 JavaScript 后端的实现有关,该后端取代了在 Qt 6 中过时的 QtScript。

对于不熟悉 Qbs 的人来说,它使用简化的 QML 语言来定义项目构建脚本,从而允许相当灵活的构建规则,这些规则可以连接外部模块、使用 JavaScript 函数并创建任意构建规则。

Qbs 的独特之处在于它没有内部构建机制,从而保证了能够从单个源代码树创建多个构建,包括从单个命令调用进行构建和并行构建。

这是一项关键特性,它确保在删除构建目录时源文件不受影响,并且不会将任何输出产物写入源目录。Qbs 的构建需要 Qt 作为依赖项,但 Qbs 本身旨在组织任何项目的组装。

Qbs 中使用的脚本语言专门用于通过 IDE 自动生成和解析构建脚本。 此外,Qbs 不生成 makefile,并且在没有像 make 实用程序这样的中介的情况下,控制编译器和链接器的发布,根据所有依赖关系的详细图表优化构建过程。

项目中结构和依赖关系的初始数据的存在使您可以有效地并行执行多个线程中的操作。 对于包含大量文件和子目录的大型项目,使用 Qbs 重建的性能可以比 make 好几倍:重建几乎是瞬时的,不会浪费开发人员等待的时间。

QBS 2.0 的主要创新

如前所述,QBS 2.0 的此次新版本发布值得关注,因为它引入了新的 JavaScript 引擎来取代 QtScript。QtScript在 Qt 6 中已经过时,因为由于与 JavaScriptCore 的复杂绑定,继续单独维护 QtScript 被认为是不现实的。

保持 QtScript 及其复杂依赖性的前景似乎并不特别吸引人。 然而,两个候选人都没有提供 API 来拦截属性访问,开发人员表示出于性能原因他们绝对需要这些 API。

从用户的角度来看,应该没有明显的变化; 特别是,性能似乎大致相同。 但是,QtScript 在不需要的上下文中接受未定义的值时相当宽松,因此新的实现可能会发现您项目中的一些错误。

该引擎符合 ES2019 规范,性能显著优于现有同类引擎(XS 提升 35%,DukTape 提升两倍以上,JerryScript 提升三倍,MuJS 提升七倍)。从构建脚本开发的角度来看,过渡到新引擎应该不会带来任何明显的改变。

性能方面也基本保持不变。不同之处在于,新引擎对空值的使用有更严格的要求,这可能会暴露出现有项目中一些在使用 QtScript 时未被发现的问题。

此外,文中还提到,qmake 项目文件已被删除,从而减少了开发人员的维护工作量。

最后提到 2.1 版将重写代码,开发人员认为他们将拥有几个新功能以及一般性能改进。

如果您有兴趣了解更多信息,可以点击以下链接查看详情。


在 Google 中将其添加为首选来源