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

时间:2013-08-19 16:46:09

标签: qt compilation mingw qt5 msys

我正在寻找一种方法来创建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的各种子模块的解释?如果有人可以指出任何关于这个主题的任何链接或文档,那也很棒。

3 个答案:

答案 0 :(得分:0)

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

只是答案的一部分。

答案 1 :(得分:0)

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

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

我认为诀窍是为“configure”脚本找到某种排除标志,但结果并非如此。

这是我做的:

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

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

    • qtbase / SRC / src.pro
    • qtbase / SRC /插件/ plugins.pro
    • qtbase /示例/ examples.pro
  3. 我对“专业”文件所做的所有更改都是删除。我删除了对以下内容的引用: dbus,ipc,network,qtconcurrent,sql,xml,sqldrivers,qdbusxml2cpp,qdbuscpp2xml,src_dbus,src_concurrent,src_sql,src_network

    最后一部分听起来可怕。它真的不是。

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

    第3步。

    通常的configure / make / install。但是,请注意传递给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。

答案 2 :(得分:-1)

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