本文记录一下Qt编译的过程,组件的添加删除及其参数设定等等,以免自己忘了
注:由于环境比较复杂所以本次实验基于win10x64虚拟机进行


依赖项

根据Qt官方的Requirements安装一下几个编译依赖项:

其他几个安装都是傻瓜式的但要注意以下三个
1.这里要注意Perl安装完毕后要启动服务,即在cmd当中能够输入perl而不报错
2.jom不需要安装后面编译的时候解压缩就可以
3.源码选择版本下single内的everywhere的zip压缩包


一、文件夹结构

编译使用shadowbuild方式进行,方便发生error后之间删除所有文件重新生成
以下是文件目录(贴出文字版避免图片失效):

C:\
└─work
    ├─jom(里面是从zip当中解压出的文件)
    ├─qt-5.14.2(暂时为空,后面用于存放最终编译出来的成品)
    ├─qt-everywhere-src-5.14.2(源码)
    └─qtbuild(配置等过程文件)

文件夹结构

二、配置参数

这就是最复杂最难受最让人搞不懂的一步了,反正出error就重试

1.解压所需的所有文件

把jom压缩包里的几个文件先暂存到work\jom\下,同时解压源码到work\文件夹下(这里以5.14.2为例)
在这里插入图片描述

2.编写编译参数项

参考别人的翻译内容Qt源码编译configure配置参数
以上翻译内容其实就是源码内的qt-everywhere-src-5.14.2\qtbase\config_help.txt,只不过是以英文呈现

额外内容不多说,仅关注几个比较重要的裁剪参数指令(注:这些modules和features之间有依赖关系,可以先随意挑选,然后配置的时候会报error,再根据error调整)

  1. -no-xxx看描述是用来关闭module的,但是问题是Qt没有提供modules的名称列表
  2. -nomake xxx不生成(每个module)当中的额外part,这些part可以在每个类的文件夹下看见,如qt-everywhere-src-5.14.2\qt3d\文件夹内可以看到有"examples"“tools"和"tests”,nomake只有四个参数[libs][examples][tools][tests]
    在这里插入图片描述
  3. -no-feature-xxx排除某些feature,具体有哪些feature可以进入源码文件夹,在命令行工具中通过指令"configure.bat" -list-features查看
  4. -skip xxx排除整个repository,有哪些repository?其实源码下每一个文件夹都是一个repository

以下是我自己通过测试选择的参数(我需要用到active控件,gui及其图片扩展,以及mysql驱动)
双冒号部分是备注,仅需看空行之后的内容
第一行是qt配置文件所在的位置
第二行-prefix后面跟的是编译完成后文件所在的位置

:: these are what we need
:: -skip qtactiveqt^
:: -skip qtbase^
:: -skip qtgraphicaleffects^
:: -skip qtimageformats^
:: -skip qtserialbus^
:: -skip qtserialport^
:: -skip qttools^
:: -no-feature-translation^
:: -no-feature-xml^

"../qt-everywhere-src-5.14.2/configure.bat"^
 -prefix "C:/Work/qt-5.14.2"^
 -confirm-license^
 -opensource^
 -debug-and-release^
 -platform win32-msvc^
 -no-accessibility^
 -no-dbus^
 -no-framework^
 -no-openssl^
 -no-ssl^
 -no-securetransport^
 -nomake examples^
 -nomake tests^
 -nomake tools^
 -no-feature-islamiccivilcalendar^
 -no-feature-jalalicalendar^
 -no-feature-testlib^
 -skip qt3d^
 -skip qtandroidextras^
 -skip qtcharts^
 -skip qtconnectivity^
 -skip qtdatavis3d^
 -skip qtdeclarative^
 -skip qtdoc^
 -skip qtgamepad^
 -skip qtlocation^
 -skip qtlottie^
 -skip qtmacextras^
 -skip qtmultimedia^
 -skip qtnetworkauth^
 -skip qtpurchasing^
 -skip qtquick3d^
 -skip qtquickcontrols^
 -skip qtquickcontrols2^
 -skip qtquicktimeline^
 -skip qtremoteobjects^
 -skip qtscript^
 -skip qtscxml^
 -skip qtsensors^
 -skip qtspeech^
 -skip qtsvg^
 -skip qttranslations^
 -skip qtvirtualkeyboard^
 -skip qtwayland^
 -skip qtwebchannel^
 -skip qtwebengine^
 -skip qtwebglplugin^
 -skip qtwebsockets^
 -skip qtwebview^
 -skip qtwinextras^
 -skip qtx11extras^
 -skip qtxmlpatterns^
 -sql-mysql MYSQL_PREFIX="C:\MySQL\MySQL Server 8.0"^
 -sql-sqlite^
 -sql-odbc^
 -qt-zlib^
 -qt-libpng^
 -qt-libjpeg^
 -qt-freetype^
 -opengl desktop^
 -mp

3.开始编译

OK,那么以上就是编译的配置信息了,接下来打开编译环境(Clang,GNU啥的自选,这里以MSVC为例)

(1)打开编译环境

从菜单栏找到并打开附带环境参数的命令行工具,以管理员身份运行谨防万一(这里编译的是x64版本,如果需要编译x86版本记得选择下面的x86 Native Tools Command...
在这里插入图片描述

(2)进入目标文件夹

再通过cd指令进入之前创建的work/qtbuild/目录下
在这里插入图片描述

(3)运行config配置信息

这一步很重要因为之前进行的组件删减信息在这一步里会被检验并且给出列表,以保证你的删减没有出现差错。将刚才编写好的参数直接复制到命令行工具中运行,将会得到Qt的提示。
在这里插入图片描述
在这里插入图片描述
运行完成配置之后,在上方有一个包含组件的概况,可以从中查看是否是自己所需要的部分

(4)使用jom进行编译

检查无误,将上级文件夹work\jom\当中的文件复制到work\qtbuild\下(建议复制,因为如果后面报错了,要重新进行步骤(3)的时候方便一并删除),然后直接在命令行工具里输入jom即可开始编译,根据CPU性能会需要等待一段时间
在这里插入图片描述
在这里插入图片描述
注意这里的提示,确保在编译之前所有依赖项都安装完毕,并且在环境变量里添加了LLVM_INSTALL_DIR并指向了LLVM的安装位置。
在这里插入图片描述
只要最后两三行不是以提示Error结尾就说明编译基本没有大问题,有Error一般会有提示比如:xxx-should-make-first这样的依赖错误或者找不到文件之类的其他问题。如果出现了error,那么先删除目标文件夹work\qt-5.14.2\work\qtbuild\下的所有文件,重新回到(3)进行配置,再重复(4)。反复调整直至像上图一样没有任何error,最后执行jom install即可。
在这里插入图片描述
恭喜,大功告成。以上就是自己进行Qt编译、删减组件、调整第三方库的全部内容了。

3.静态编译(非必须)

上面是正常编译Qt动态链接库的全过程,有些人需要自己的Qt程序能够打包成单一文件运行就会需要Qt的静态编译版本,这里也简要提及一下。

  • 静态编译和动态编译的(1)(2)步骤一样,没有任何区别
  • 在(3)之前,找到文件Work\qt-everywhere-src-5.14.2\qtbase\mkspecs\common\msvc-desktop.conf这个文件然后用记事本打开。
  • 寻找QMAKE_CFLAGS这个文字,下面有三个参数需要修改
// 将原本的
QMAKE_CFLAGS_RELEASE    = $$QMAKE_CFLAGS_OPTIMIZE -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MD
QMAKE_CFLAGS_DEBUG      = -Zi -MDd

// 改成
QMAKE_CFLAGS_RELEASE    = $$QMAKE_CFLAGS_OPTIMIZE -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_OPTIMIZE -Zi -MT
QMAKE_CFLAGS_DEBUG      = -Zi -MTd
  • 保存完毕后继续执行(3)(4)步骤就完成了
  • 不过一定要注意,如果你需要的组件里面有第三方库,比如我需要用到qsqlmysql驱动,由于qt驱动的实现是调用其他依赖项的动态链接库所以会无法进行静态编译

总结

无话可说,资料太少了,能用且用吧hhh
不过不得不说Qt模组的体积是真的大,通过以上模组的删减Qt5.14.2的软件体积可以从6G压缩到600M

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐