在 Ubuntu 中编译 Qt 模块 qtmqtt 官方源码
一、准备
提前准备
- Kubuntu 24.04
- Qt 5.14.2
- git
- 官方 qtmqtt 源码
二、下载
- git 下载:
sudo apt install git
- Qt 下载地址:
https://download.qt.io/archive/qt/5.14/5.14.2/
,下载 run 文件,由于 Qt 屏蔽了中国大陆的 IP ,所以这里需要魔法上网。下载后运行命令(若没有账号,需要断网再运行命令):
sudo chmod +x ./qt-opensource-linux-x64-5.14.2.run
sudo dpkg -i ./qt-opensource-linux-x64-5.14.2.run
- qtmqtt 下载地址:
https://github.com/qt/qtmqtt/
,运行:
git clone https://github.com/qt/qtmqtt.git
再切换分支:
cd qtmqtt
git checkout 5.14.2
三、环境变量
在 .bashrc(或 .zshrc)中添加环境变量:
export PATH=/home/xxx/Qt5.14.2/5.14.2/gcc_64/bin:$PATH
export LD_LIBRARY_PATH=/home/xxx/Qt5.14.2/5.14.2/gcc_64/lib:$LD_LIBRARY_PATH
在终端运行,使环境变量生效:
source ~/.bashrc
# 或者
source ~/.zshrc
四、编译到 /home/xxx/Qt5.14.2/5.14.2/gcc_64/
# 这里我是将 qtmqtt 下载到 home 目录下。
cd ~/qtmqtt
# 切换到 Qt 当前对应的版本分支
git checkout 5.14.2
# 创建 build 目录
mkdir build
cd build
# Qt5.14.2 也是安装在 home 目录下。
# 使用 qmake 编译 pro 文件, qmake 要使用 Qt5.14.2 的,否则会使用系统自带的,qmake 版本不对应会有问题。
# INSTALL_ROOT 是参数指定安装路径。
# make install 会将文件安装到 INSTALL_ROOT 指定的路径中。
# 默认情况下,如果没有指定 INSTALL_ROOT,文件可能会安装到系统的默认路径(如 /usr/local)。
/home/xxx/Qt5.14.2/5.14.2/gcc_64/bin/qmake /home/xxx/qtmqtt/qtmqtt.pro INSTALL_ROOT=/home/xxx/Qt5.14.2/5.14.2/gcc_64
make -j$(nproc) VERBOSE=1
make install
# 最后清理
make clean
# 手动将 modules-inst/ 复制到 Qt 安装目录下,这里不会自动复制过去
cp -r ./mkspecs/modules-inst /home/xxx/Qt5.14.2/5.14.2/gcc_64/mkspecs/
五、编译到 /home/xxx/Qt5.14.2/5.14.2/android/
cd ~/qtmqtt
# 删除之前的 build/ 目录,因为之前的里面是编译生成的 gcc_64/ 的文件
rm -rf ./build
# 重新创建
mkdir build
cd build
# 这里用 android/ 下的 qmake 编译,不要弄错了
/home/xxx/Qt5.14.2/5.14.2/android/bin/qmake /home/xxx/qtmqtt/qtmqtt.pro INSTALL_ROOT=/home/xxx/Qt5.14.2/5.14.2/android
make -j$(nproc) VERBOSE=1
make install
make clean
cp -r ./mkspecs/modules-inst /home/xxx/Qt5.14.2/5.14.2/android/mkspecs/
注意:Qt 5.14.2 下只有一个 android/ 文件夹,只需要编译一次,而有些版本像 Qt 5.12.8 之类的有 android_arm64_v8a/ 、 android_armv7/ 和 android_x86/ 三个文件夹,这时候需要编译三次,每次都用对应的qmake版本编译!!!
六、验证安装
编译完成后,会自动将 build/ 目录下的 lib/、include/、mkspecs/modules/
目录文件复制到对应的 gcc_64/ 目录下,记得手动将 mkspecs/modules-inst/ 目录复制过去,记得仔细查看是否有缺少的文件,如果有就手动复制,编译至此全部结束。
七、其它
其它 Linux 发行版也可照此编译,例如:Fedora。