#!/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,重启终端即可全局生效"