Qt 5.1 的模块及其相互依赖关系?

Posted

技术标签:

【中文标题】Qt 5.1 的模块及其相互依赖关系?【英文标题】:Modules of Qt 5.1 and their interdependency? 【发布时间】:2013-08-19 16:46:09 【问题描述】:

我正在寻找一种方法来创建 Qt 5.1 的最小静态构建。最低限度,我的意思是一个只有基本的小部件类可用的构建(包括通过 OpenGL 画布/小部件的 2D 图形加速)。我的目标是使用MinGW-builds GCC 4.8.1 以及它们的MSYS 和工具包在Windows 7 32 位上进行静态构建。

我已经下载了整个源代码树,但由于OpenSSL和ICU等软件包的依赖性(最新的OpenSSL没有编译),我在编译时遇到了一些问题。我想看看,如果我可以避免这些包的依赖关系,同时实现 Qt 5.1 的最小静态构建,那么我的最终可执行文件的大小不会很大。

我查看了这个列表: http://download.qt-project.org/official_releases/qt/5.1/5.1.0/submodules/.

Q1:在这些模块中,我需要选择哪些模块来构建没有所有花哨的东西的基本 Qt 构建?

Q2:这些模块是否以某种方式相互依赖(我假设它们都依赖于“qtbase”)?

Q3:我是否使用该列表中的名称(例如:“qtxmlpatterns”、“qtx11extras”、“qtwebkit”等)在我的 Qt 配置中取消选择它们构建?

如果能解释一下 Qt 5 的各种子模块,那也不错?如果有人可以指出任何关于这个主题的具有启发性的文字的链接或文档,那也很棒。

【问题讨论】:

现在我得到了一个风滚草徽章。谢谢。 【参考方案1】:

我有着同样的目标。我想“缩小”Qt,只构建一小部分库/DLL,而忽略其余部分。

我确实成功了,至少在 Mac OS X 上是这样。我认为这种方法也适用于其他平台。

我认为诀窍是为“配置”脚本找到某种排除标志,但事实并非如此。

这是我所做的:

    下载源代码分发版(在我的例子中,qt-everywhere-opensource-src-5.1.1)。当然,把它全部提取出来。

    编辑以下三个“专业”文件。这些文件是特定于 qt 的格式(但纯文本)。它们是 Qt(通过 qmake)用来生成 makefile 的独立于平台的项目文件。

    qtbase/src/src.pro qtbase/src/plugins/plugins.pro qtbase/examples/examples.pro

我对“专业”文件所做的所有更改都是删除。我删除了对以下内容的引用:dbus、ipc、network、qtconcurrent、sql、xml、sqldrivers、qdbusxml2cpp、qdbuscpp2xml、src_dbus、src_concurrent、src_sql、src_network

最后一部分听起来很吓人。真的不是。

pro 文件包含模块名称、插件名称和目录名称的列表。如何删除(例如)所有与 SQL 相关的行似乎相当简单。

第 3 步。

通常的配置/制作/安装。但是,请注意传递给 make 的“module-qtbase”参数:

./configure -prefix ~/my_test_dir/
make -j2 module-qtbase
make -j2 module-qtbase-install_subtargets

成功。这仅构建并安装了必需品(QtCore、QtGui、QtOpenGL、QtWidgets)并跳过了所有支持的 dylib,如 QtConcurrent、QtMultimedia、QtSql 和 QtWebKit。

【讨论】:

我将不得不在某个时候尝试这个。我很久以前就放弃了 :) 我从没想过有必要自己更改 .pro 文件。我在 Windows 7(目前是 32 位)上,在编译过程中走得比较远。在某个时间点,30-45 分钟后,与 ICU 的链接搞砸了,制作过程停止了。我再也没有回过头来。也许我应该再试一次。【参考方案2】:

ICU 可以静态链接,您可以自定义它(请参阅文档)以减小大小。默认数据也很大,不知道你需要多少数据。您可以只包含足以以一种语言运行的数据。

只是答案的一部分。

【讨论】:

谢谢。我以为这个问题已经被遗弃和遗忘了。了解 Qt 5.1 中的各个模块吗? @OleThomsenBuus 不,抱歉。我在 ICU 工作,正在寻找 ICU 问题。不过,请参阅您得到的其他答案。【参考方案3】:

无需禁用 Qt 模块。每个使用 Qt 的应用程序决定它使用和链接的模块。一个基本的纯控制台应用程序只能使用核心模块。这就是您在 Qt 中创建 Web 服务时所使用的。

【讨论】:

以上是关于Qt 5.1 的模块及其相互依赖关系?的主要内容,如果未能解决你的问题,请参考以下文章

模块之间的Python依赖关系[重复]

Gradle 查看包的依赖关系

华为云技术分享Linux内核模块依赖图绘制

向依赖关系宣战[转]

maven中引入其他模块会下载他的依赖吗

maven一个web模块能依赖另一个web模块吗