Skip to main content

Qt模块化工作进展

Comments

原文链接: Kristian Amlie - Status of Qt Modularization

这是一篇去年十月份Qt正走向模块化的后续文章。目前这部分工作正在稳步推进, 现在我们已将大部分的Qt主要组件模块化。

在下图中, 你会看到当前的模块划分。那些本来就不是Qt一部分的模块没有包含在内。

一些关于设计方面的决策:

  • 模块间不允许有源代码依赖, 仅允许头文件依赖。
  • QtKernel代码库仍然包含很多模块。做出这一选择的原因是,从技术的角度来看分开这些模块太过于困难。在部分模块间有很多私有文件的依赖(尤其是QtCore和QtGui),虽然我们可以把这些模块分离在不同的代码库, 不过他们之间的依赖如此之大, 使得如此分离意义不大。在源码级别分离它们将需要太长时间, 目前而言使Qt剩下的部分模块化才是更重要的。 当然,我们仍然可以在后续的项目中进一步使之模块化。
  • 因为类的文档是写在.cpp文件里的,所以这部分文档将很自然地属于其所在模块。其它概述性的文档和qdoc工具本身将使用单独的代码库。
  • 示例和演示程序一般而言讲属于其所演示的模块, 不过如果依赖于多个模块,例如qtdemo这样的,将放在doc代码库。
  • 平台功能自动检测部分的配置脚本仍然属于QtKernel代码库, 即使这部分功能会被其它模块所用。这同样也是为了节省项目的时间。目标是, 当Qt模块化功能完成时,各个模块的维护者应该转向它们自己的配置脚本(或者其它方式)。例如,QtWebkit已经有了build-webkit这样的脚本。
  • "git submodule" 被选中做为提供包含全部模块化代码的主代码库的方式

当前状态:

Qt中的大部分已经被模块化, 且可以在Linux上被构建。当前正在进行中的三个主要工作是:在其它平台构建,运行自动化测试和在Qt代码库主分支上采用模块化(当前的工作基于Qt 4.7分支)。

在切换过程中将发生什么

因为模块化对我们来说是一个至关重要的项目, 所以我们希望能够尽可能早的切换过去。 这意味着部分会干扰到本次项目的工作要推迟到切换以后。目前为止还没有确切的日期, 不过初步估计会在1到2个月以内发生。当确定日期后,后续会公布更多消息。
切换时, 当前正在用于开发的Qt代码库讲被关闭并阻止任何代码提交。 然后, 按照上图所示的新代码库将被创建。旧Qt代码库将被归档,从而使用“git graft”机制仍然可以看到旧的代码历史。然而,新代码库起始状态将不包含任何代码历史信息,QtWebKit将是一个例外, 因为它已经是一个独立的基于原始的Webkit代码历史的代码库了。

这意味着代码合并请求要开始进入各个独立的模块,现存的合并请求将很遗憾地需要按照最新的模块分布重新提交。

在一开始将不可避免地会遇到很多困难, 但是希望在理顺这些关系后, 我们会有一个更易于使用和愉快地开发的全新的Qt代码库结构。

-
译者注:

一些未出现在上图中的模块说明:QtHelp属于QtTools代码库的Assistant模块, QtSql仍属于QtKernel代码库

Comments

Subscribe to our blog

Try Qt 6.11 Now!

Download the latest release here: www.qt.io/download

Qt 6.11 is now available, with new features and improvements for application developers and device creators.

We're Hiring

Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.