Qt 5.1模块及其相互依赖性



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

我已经下载了整个源代码树,由于对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的各个子模块,那也太好了?如果有人能指出任何关于这个主题的链接或文档,那也太好了。

我有同样的目标。我想"缩小"Qt,只构建库/DLL的一小部分,并省略其余部分。

我确实成功了,至少在Mac OS X上是这样。我想这种方法也会在其他平台上运行。

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

以下是我所做的:

  1. 下载源发行版(在我的例子中,是qt-everywhere-opensource-src-5.1.1)。当然,提取所有内容。

  2. 编辑以下三个"专业"文件。这些文件采用特定于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、qdbusscpp2xml、src_dbus、src_concurrent,src_sql、src_network

最后一部分听起来可能很吓人。事实并非如此。

专业文件包含模块名称、插件名称和目录名称的列表。如何删除(例如)所有与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、QtMultedia、QtSql和QtWebKit。

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

只是答案的一部分。

没有必要禁用Qt模块。每个使用Qt的应用程序决定它使用什么模块并与之链接。仅限控制台的基本应用程序可能仅使用核心模块。这就是你在Qt中创建web服务时使用的方法。

最新更新