QT5.15.12 编译备忘

#!/bin/bash

set -e # 遇到错误立即退出,避免后续无效执行

===================== 配置参数(可按需修改)=====================

QT_VERSION="5.15.12"

INSTALL_PATH="/home/kylin/qt5" # 安装路径

SOURCE_URL="https://download.qt.io/archive/qt/5.15/${QT_VERSION}/single/qt-everywhere-opensource-src-${QT_VERSION}.tar.xz"

SOURCE_TAR="qt-everywhere-opensource-src-${QT_VERSION}.tar.xz"

SOURCE_DIR="qt-everywhere-opensource-src-${QT_VERSION}"

===================== 第一步:安装必备依赖 =====================

echo -e "\033[32m[1/6] 正在安装编译依赖...\033[0m"

sudo apt-get update

sudo apt-get install -y \

build-essential gcc g++ make cmake ninja-build \

libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev \

libxcb1-dev libxkbcommon-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev \

libxcb-icccm4-dev libxcb-sync0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev \

libgl1-mesa-dev libglu1-mesa-dev libgles2-mesa-dev \

libssl-dev libdbus-1-dev libharfbuzz-dev libicu-dev libjpeg-dev libpng-dev \

wget tar nano

===================== 第二步:下载并解压源码 =====================

echo -e "\033[32m[2/6] 正在下载Qt ${QT_VERSION}源码...\033[0m"

if [ ! -f "${SOURCE_TAR}" ]; then

wget -c "{SOURCE_URL}" -O "{SOURCE_TAR}" # -c 支持断点续传

else

echo "源码包已存在,跳过下载"

fi

echo -e "\033[32m[3/6] 正在解压源码...\033[0m"

if [ ! -d "${SOURCE_DIR}" ]; then

tar -xf "${SOURCE_TAR}"

else

echo "源码已解压,跳过解压"

fi

cd "${SOURCE_DIR}" || exit 1 # 进入源码目录,失败则退出

===================== 第三步:修复mimetype_database报错 =====================

echo -e "\033[32m[4/6] 正在修复编译报错...\033[0m"

QMIME_FILE="qtbase/src/corelib/mimetypes/qmimeprovider.cpp"

1. 添加头文件

if ! grep -q "#include \"qmimedatabase_p.h\"" "${QMIME_FILE}"; then

sed -i '1i #include "qmimedatabase_p.h"' "${QMIME_FILE}"

fi

2. 添加变量声明(在第637行前插入)

DECLARE_CODE="extern const unsigned char mimetype_database[];\nextern const size_t MimeTypeDatabaseOriginalSize;"

if ! grep -q "extern const unsigned char mimetype_database\[\];" "${QMIME_FILE}"; then

sed -i '637i '"{DECLARE_CODE}"'' "{QMIME_FILE}"

fi

===================== 第四步:配置编译参数 =====================

echo -e "\033[32m[5/6] 正在配置编译参数...\033[0m"

./configure \

-prefix "${INSTALL_PATH}" \

-opensource \

-confirm-license \

-release \

-shared \

-no-static \

-no-opengl es2 \

-no-opengl es3 \

-no-opengl es3.2 \

-opengl desktop \

-ssl \

-dbus \

-harfbuzz \

-icu \

-no-qml-debug \

-nomake examples \

-nomake tests \

-no-feature-glibc-version-check \

-j$(nproc)

===================== 第五步:编译与安装 =====================

echo -e "\033[32m[6/6] 正在编译(多核模式)...\033[0m"

make -j$(nproc)

echo -e "\033[32m[7/7] 正在安装Qt ${QT_VERSION}...\033[0m"

sudo make install

===================== 第六步:配置环境变量 =====================

echo -e "\033[32m[8/8] 正在配置环境变量...\033[0m"

ENV_CONFIG="\n# Qt {QT_VERSION} 环境变量\\nexport QTDIR={INSTALL_PATH}\nexport PATH=\QTDIR/bin:\\PATH\nexport LD_LIBRARY_PATH=\QTDIR/lib:\\LD_LIBRARY_PATH"

写入/etc/profile(系统级环境变量,所有用户生效)

if ! grep -q "QTDIR=${INSTALL_PATH}" /etc/profile; then

sudo echo -e "${ENV_CONFIG}" >> /etc/profile

source /etc/profile # 立即生效

echo "环境变量配置完成"

else

echo "环境变量已存在,跳过配置"

fi

===================== 验证安装 =====================

echo -e "\033[32m Qt ${QT_VERSION} 编译安装完成!\033[0m"

echo -e "验证命令:qmake -v"

echo -e "安装路径:${INSTALL_PATH}"

echo -e "环境变量已写入 /etc/profile,重启终端即可全局生效"

相关推荐
娇娇yyyyyy1 天前
QT编程(13): Qt 事件机制eventfilter
开发语言·qt
带娃的IT创业者1 天前
工具状态失踪之谜:EventBus事件漏接与asyncio.Lock并发陷阱双线诊断
qt·websocket·并发控制·eventbus·事件驱动架构·pwa·asyncio.lock
不想看见4041 天前
C++/Qt 代码规范指南
开发语言·qt
li星野1 天前
QT模拟题:QT项目实践与架构设计(120分钟)
开发语言·qt
笑鸿的学习笔记1 天前
qt-C++语法笔记之Qt中的delete ui、ui的本质与Q_OBJECT
c++·笔记·qt
不想看见4041 天前
Qt 框架中的信号与槽机制【详解】
服务器·数据库·qt
行者..................1 天前
第2课:恢复出厂、掌握 Linux 基础命令并完成首次 GCC 编译
linux·qt·driver
Lhan.zzZ1 天前
深入浅出 Qt 信号槽连接方式:从 AutoConnection 到 BlockingQueuedConnectionQt
开发语言·c++·qt
Ronin3052 天前
【Qt窗口】Qt窗口
开发语言·qt·qt窗口
行者..................2 天前
第1课:搭建 Linux 驱动与 Qt 开发基础环境
linux·运维·qt·mpsoc