不愿意安装庞大的QT开发IDE,可以编译QT源码库。
下载源码可以用国内镜像,如清华大学的:Index of /qt/archive/qt/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
我用的是 6.5.3,进去之后,不要下载整个源码包,而是找到 submodules 目录。核心组件是 qtbase-everywhere-6.xxx。
qtbase 是基础包,只编译这个模块的代码也能写 Qt 程序。解压之后,放在一个路径无空格无特殊符号的目录下,如 E:\SDK\Qt。然后执行一下 configure 脚本,Windows 上是有后缀 .bat 的,Linux 脚本无后缀。
命令行参数可参考帮助文档,实际上我们只关心一个参数 -prefix。这个参数指定在编译成功后,复制(安装)动态库的目录。
我用的编译器是mingw12.3。
打开powershell管理员运行,在命令提示窗口输入:
configure.bat -prefix E:\downloads\Qt-6.5.3 -release
这样配置之后,将来在执行安装时会把生成的 .dll 复制到这个目录下。
另外,如果打算将来要编译其他模块,并且让这些模块所生成的二进制文件减少调试符号,就要加上 -release 参数。
虽然 qtbase 模块默认是以 release 模式编译,但有些子模块默认是 debug 模式编译的。所以,如果希望后面编译的所有模块都以 release 模式编译,那就明确使用此参数。
一切顺利之后,直接交给 CMake 解决。编译:
cmake --build .
. 是源码所在目录,因为上面我们已经 cd 到源码目录了,所以这里用个“.”表示当前目录。
运气好的话,一次通过。
编译成功后,还要执行一下安装操作:
cmake --install .
后面的“.”依然指的是当前目录(源码目录),编译后的二进制文件(重点是那些 .dll)会复制到你刚才用 -prefix 参数配置的路径下。如刚才配置的是 F:\Qt6\Libs。
上面的方案是保证出错概率最低的做法,但是,生成文件会和源码混在一起,想手动清理它们估计会累死人。如果想三个基本目录相互隔离,就要用接下来的方法。这三个目录是:
1、源码。
2、build 输出目录。
3、安装目录。
我们来假设一下:
1、源代码:E:\downloads\0-temp\qt6\qtbase-everywhere-src-6.5.3
2、build 输出目录:E:\downloads\0-temp\qt6\qtbase-everywhere-src-6.5.3\build
3、安装目录:E:\downloads\Qt-6.5.3
废话一下,我现在的想法是:保留源代码目录不变,想留着将来重复用;把生成/编译输出的东东放在 build 目录,编译好后的二进制文件安装到 installed 目录。下面开始操作。
cd E:\downloads\0-temp\qt6\qtbase-everywhere-src-6.5.3\build
命令工具窗口当前目录一般是 C 盘,要跨分区 CD 的话,要加上 /d 参数。
保持 build 目录为当前目录不要改变,在 build 目录中执行 configure 脚本。
..\src\qtbase\configure -prefix ..\installed
这里用的是相对路径,你也可以用绝对路径。注意 -prefix 参数是一个短横线的,不能写成 --prefix,会出错。如果看到下面这一行,说明你运气好,第一关算是过了,接下来的编译成功率很高。
Build files have been written to: E:\downloads\0-temp\qt6\qtbase-everywhere-src-6.5.3/build
接下来的操作就和前面的一样了。保持当前目录在 build 不变,依次执行:
cmake --build .
cmake --install .
编译默认是生成动态库的,所以在 configure 时我们不用改。建议用动态库,若编译为静态库,做项目时会涉及授权问题,也就是说你要购买。
接下来编译serialport模块:
编译附加模块无需重新配置,而是通过一个脚本来设置参数。这个脚本位于你最终的安装路径中,比如,我的是 E:\downloads\Qt-6.5.3,在 bin 子目录下,有个名为 qt-configure-module 的脚本。Linux 上无后缀,Windows 上为 .bat。
用法也很简单,直接输入:qt-configure-module <附加模块源码路径>
只有源代码路径是必须参数,之后是可选参数。这些参数是什么取决于你正在编译的模块——也就是说每个模块的选项不同。可以在模块的源码目录下找到一个叫 config_help.txt 的文本文件,里面会有选项说明。比如,qtmultimedia 模块的选项说明如下:
Multimedia options:
-pulseaudio .......... Enable PulseAudio support [auto] (Unix only)
-alsa ................ Enable ALSA support [auto] (Unix only)
-no-gstreamer ........ Disable support for GStreamer
-gstreamer [version] . Enable GStreamer support [auto]
With no parameter, 1.0 is tried first, then 0.10.
-evr ................. Enables EVR in WMF [auto]
由于其他模块下面没有configure脚本,我们在qtbas源码下配置,在qtbase源码下输入如下命令:
configure.bat -prefix E:\downloads\Qt-6.5.3 -release
然后切换到serialport模块下:
cd ..\qtserialport-everywhere-src-6.5.3\
执行 qt-configure-module 脚本,配置 qtshadertools 模块。
E:\downloads\Qt-6.5.3\bin\qt-configure-module.bat E:\downloads\0-temp\qt6\qtserialport-everywhere-src-6.5.3
然后编译安装:
cmake --build .
cmake --install .
模块动态库等相关信息会更新到之前编译安装的qtbase安装目录。
然后相同的方法安装qtsvg,qtmultimedia等模块。
在编译 qtmultimedia 模块,还要下载 qtshadertools 模块。因为 qtmultimedia 依赖 qtshadertools。说白了,咱们要先编译并安装 qtshadertools 模块。
多媒体模块 qtmultimedia 编译成功后。再次回到 install\bin 目录,就能看到它了。
有个带“Widgets”结尾的,它包含 UI 元素(也叫控件),主要是用来呈现视频,要不然用户只能看个寂寞。
参考连接:https://www.cnblogs.com/tcjiaan/p/16575655.html