跳转至

本地编译指南

本文档介绍如何在本地编译 EasyKiConverter 项目。

环境要求

操作系统

  • Windows 10/11(推荐)
  • macOS
  • Linux

Qt 版本

  • Qt 6.6 或更高版本
  • 推荐 Qt 6.10.1

CMake 版本

  • CMake 3.16 或更高版本

编译器

Windows - MinGW 13.10(推荐) - MSVC 2019+

macOS - Clang(Xcode 12+)

Linux - GCC 9+ - Clang 10+

Qt 模块

需要安装以下 Qt 模块:

  • Qt Quick
  • Qt Network
  • Qt Core
  • Qt Gui
  • Qt Widgets
  • Qt Quick Controls 2

第三方库

  • zlib(用于 GZIP 解压缩)

安装依赖

Windows

安装 Qt

  1. 访问 Qt 官网
  2. 下载 Qt Online Installer
  3. 运行安装程序
  4. 选择 Qt 6.10.1 或更高版本
  5. 选择 MinGW 13.10 编译器
  6. 安装所需的 Qt 模块:
  7. Qt Quick
  8. Qt Network
  9. Qt Core
  10. Qt Gui
  11. Qt Widgets
  12. Qt Quick Controls 2

安装 CMake

  1. 访问 CMake 官网
  2. 下载 Windows 安装包
  3. 运行安装程序
  4. 将 CMake 添加到系统 PATH

安装编译器

MinGW 1. Qt 安装程序会自动安装 MinGW 2. 或从 MinGW-w64 下载

MSVC 1. 安装 Visual Studio 2019 或更高版本 2. 在安装时选择 "使用 C++ 的桌面开发" 工作负载

macOS

使用 Homebrew 安装

# 安装 Homebrew(如果尚未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装 Qt
brew install qt@6

# 安装 CMake
brew install cmake

# 安装 Xcode 命令行工具
xcode-select --install

从 Qt 官网安装

  1. 访问 Qt 官网
  2. 下载 macOS 安装包
  3. 运行安装程序
  4. 安装 Qt 6.10.1 或更高版本

Linux

Ubuntu/Debian

# 更新包管理器
sudo apt-get update

# 安装 Qt 6 基础和必需模块
# 注意:Network 模块已包含在 qt6-base-dev 中,无需单独安装 qt6-network-dev
sudo apt-get install qt6-base-dev qt6-declarative-dev qt6-tools-dev qt6-websockets-dev

# 安装 CMake
sudo apt-get install cmake

# 安装编译器
sudo apt-get install build-essential g++

# 安装 zlib
sudo apt-get install zlib1g-dev

# 安装 XKB 支持(Qt 6 GuiPrivate 模块需要)
sudo apt-get install libxkbcommon-dev libxkbcommon-x11-dev qt6-base-private-dev

Fedora

# 安装 Qt 6
sudo dnf install qt6-qtbase-devel qt6-qtdeclarative-devel qt6-qttools-devel qt6-qtnetworkauth-devel

# 安装 CMake
sudo dnf install cmake

# 安装编译器
sudo dnf install gcc-c++

# 安装 zlib
sudo dnf install zlib-devel

Arch Linux

# 安装 Qt 6
sudo pacman -S qt6-base qt6-declarative qt6-tools qt6-networkauth

# 安装 CMake
sudo pacman -S cmake

# 安装编译器
sudo pacman -S gcc

# 安装 zlib
sudo pacman -S zlib

获取源代码

Clone 仓库

git clone https://github.com/tangsangsimida/EasyKiConverter_QT.git
cd EasyKiConverter_QT

Fork 并 Clone(如果您计划贡献)

  1. 在 GitHub 上 Fork 本项目
  2. Clone 您的 Fork:
git clone https://github.com/your-username/EasyKiConverter_QT.git
cd EasyKiConverter_QT

编译项目

使用 Python 构建工具(推荐)

项目提供了统一的 Python 构建管理工具,支持自动化构建、环境检查和日志管理。

Windows

# 使用批处理包装器(推荐)
tools\windows\build_project.bat                # 默认 Debug 构建
tools\windows\build_project.bat -t Release     # Release 构建
tools\windows\build_project.bat -c -y          # 强制清理并构建
tools\windows\build_project.bat --check        # 仅检查依赖环境
tools\windows\build_project.bat --config-only  # 仅执行 CMake 配置
tools\windows\build_project.bat -t Release -i  # 构建并安装
tools\windows\build_project.bat -v             # 详细日志模式

跨平台(Python)

# 直接调用 Python 构建脚本
python tools/python/build_project.py -t Release --parallel
python tools/python/build_project.py --check
python tools/python/build_project.py -c -y

Python 构建脚本参数:

参数 说明
-t, --type 构建类型: Debug/Release/RelWithDebInfo/MinSizeRel
-c, --clean 清理构建目录
-y, --yes 自动确认(与 -c 配合使用)
-i, --install 构建后执行安装
-v, --verbose 详细日志输出
--check 仅检查环境依赖
--config-only 仅执行 CMake 配置
-j, --parallel 并行编译线程数

手动构建(CMake)

如果您需要手动控制构建过程,可以使用以下方法:

Windows + MinGW

# 创建构建目录
mkdir build
cd build

# 配置项目
cmake .. -G "MinGW Makefiles" -DCMAKE_PREFIX_PATH="C:/Qt/6.10.1/mingw_64"

# 编译项目(Debug 版本)
cmake --build . --config Debug

# 编译项目(Release 版本)
cmake --build . --config Release

# 运行应用程序
./bin/EasyKiConverter.exe

Windows + MSVC

# 创建构建目录
mkdir build
cd build

# 配置项目
cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_PREFIX_PATH="C:/Qt/6.10.1/msvc2019_64"

# 编译项目(Debug 版本)
cmake --build . --config Debug

# 编译项目(Release 版本)
cmake --build . --config Release

# 运行应用程序
./bin/Debug/EasyKiConverter.exe

macOS

# 创建构建目录
mkdir build
cd build

# 配置项目
cmake .. -DCMAKE_PREFIX_PATH="/usr/local/Qt-6.10.1"

# 编译项目(Debug 版本)
cmake --build . --config Debug

# 编译项目(Release 版本)
cmake --build . --config Release

# 运行应用程序
./bin/EasyKiConverter

Linux

# 创建构建目录
mkdir build
cd build

# 配置项目
cmake .. -DCMAKE_PREFIX_PATH="/opt/Qt/6.10.1/gcc_64"

# 编译项目(Debug 版本)
cmake --build . --config Debug

# 编译项目(Release 版本)
cmake --build . --config Release

# 运行应用程序
./bin/EasyKiConverter

编译项目(含测试)

Windows + MinGW

# 创建构建目录
mkdir build
cd build

# 配置项目(启用测试构建)
cmake .. -G "MinGW Makefiles" -DCMAKE_PREFIX_PATH="C:/Qt/6.10.1/mingw_64" -DEASYKICONVERTER_BUILD_TESTS=ON

# 编译项目(Debug 版本)
cmake --build . --config Debug

# 编译项目(Release 版本)
cmake --build . --config Release

# 运行应用程序
./bin/EasyKiConverter.exe

# 运行测试
ctest --output-on-failure

Windows + MSVC

# 创建构建目录
mkdir build
cd build

# 配置项目(启用测试构建)
cmake .. -G "Visual Studio 17 2022" -A x64 -DCMAKE_PREFIX_PATH="C:/Qt/6.10.1/msvc2019_64" -DEASYKICONVERTER_BUILD_TESTS=ON

# 编译项目(Debug 版本)
cmake --build . --config Debug

# 编译项目(Release 版本)
cmake --build . --config Release

# 运行应用程序
./bin/Debug/EasyKiConverter.exe

# 运行测试
ctest --output-on-failure

macOS/Linux

# 创建构建目录
mkdir build
cd build

# 配置项目(启用测试构建和覆盖率支持)
cmake .. -DCMAKE_PREFIX_PATH="/opt/Qt/6.10.1/gcc_64" -DEASYKICONVERTER_BUILD_TESTS=ON -DENABLE_COVERAGE=ON

# 编译项目(Debug 版本)
cmake --build . --config Debug

# 编译项目(Release 版本)
cmake --build . --config Release

# 运行应用程序
./bin/EasyKiConverter

# 运行测试
ctest --output-on-failure

测试选项说明

  • -DEASYKICONVERTER_BUILD_TESTS=ON: 启用测试构建,编译测试代码
  • -DENABLE_COVERAGE=ON: 启用代码覆盖率支持(仅 GCC/MinGW)
  • ctest --output-on-failure: 运行所有测试,失败时显示详细输出

详见: 测试指南

使用 Qt Creator 编译

  1. 安装 Qt Creator
  2. 打开 Qt Creator
  3. 选择 "文件" -> "打开文件或项目"
  4. 选择项目根目录下的 CMakeLists.txt
  5. 配置构建套件(Kit):
  6. 选择 Qt 版本(Qt 6.10.1 或更高)
  7. 选择编译器(MinGW、Clang 或 GCC)
  8. 点击 "配置项目"
  9. 点击 "构建"按钮(或按 Ctrl+B)
  10. 点击 "运行"按钮(或按 F5)启动应用程序

编译选项

启用调试导出功能

cmake .. -G "MinGW Makefiles" -DCMAKE_PREFIX_PATH="C:/Qt/6.10.1/mingw_64" -DENABLE_SYMBOL_FOOTPRINT_DEBUG_EXPORT=ON

这将启用调试数据导出功能,用于调试转换过程。

多线程编译

Windows (MSVC)

MSVC 编译器会自动使用 /MP 选项进行多线程编译,无需额外参数。

Windows (MinGW)

# 使用 16 个并行任务编译
cmake --build . --config Debug -- -j 16

# 或使用系统最大核心数
cmake --build . --config Debug -- -j

Linux/macOS

# 使用 16 个并行任务编译
cmake --build . --config Debug -- -j 16

# 或使用系统最大核心数
cmake --build . --config Debug -- -j$(nproc)

注意: - 并行编译可以显著加快编译速度,特别是在多核 CPU 上 - 建议根据 CPU 核心数调整并行任务数(通常设置为 CPU 核心数的 1-2 倍) - 如果遇到内存不足问题,可以减少并行任务数

指定构建类型

# Debug 版本
cmake .. -DCMAKE_BUILD_TYPE=Debug

# Release 版本
cmake .. -DCMAKE_BUILD_TYPE=Release

# RelWithDebInfo 版本
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo

常见问题

找不到 Qt

错误信息:

Could not find Qt6

解决方案: 确保 CMAKE_PREFIX_PATH 指向正确的 Qt 安装路径。

cmake .. -DCMAKE_PREFIX_PATH="/path/to/Qt/6.10.1/gcc_64"

找不到 zlib

错误信息:

Could not find ZLIB

解决方案:

Windows: Qt 通常自带 zlib,确保 Qt 安装完整。

macOS:

brew install zlib

Linux:

sudo apt-get install zlib1g-dev  # Ubuntu/Debian
sudo dnf install zlib-devel       # Fedora
sudo pacman -S zlib               # Arch Linux

找不到 XKB 或 GuiPrivate 相关错误

错误信息:

Could NOT find XKB (missing: XKB_LIBRARY XKB_INCLUDE_DIR)
CMake Error: The link interface of target "Qt6::GuiPrivate" contains XKB::XKB but the target was not found.

解决方案:

Ubuntu/Debian:

sudo apt-get install libxkbcommon-dev libxkbcommon-x11-dev qt6-base-private-dev

Fedora:

sudo dnf install libxkbcommon-devel libxkbcommon-x11-devel qt6-qtbase-private-devel

Arch Linux:

sudo pacman -S libxkbcommon qt6-base

找不到 Qt 动态库

错误信息:

Failed to load platform plugin "windows"

解决方案:

Windows: 将 Qt 的 bin 目录添加到 PATH 环境变量。

set PATH=C:\Qt\6.10.1\mingw_64\bin;%PATH%

Linux/macOS:

export PATH="/path/to/Qt/6.10.1/gcc_64/bin:$PATH"
export LD_LIBRARY_PATH="/path/to/Qt/6.10.1/gcc_64/lib:$LD_LIBRARY_PATH"

编译错误

错误信息:

error: 'xxx' was not declared in this scope

解决方案:

  1. 检查 Qt 版本是否正确
  2. 检查编译器版本是否支持 C++17
  3. 清理构建目录重新编译
cd build
cmake --build . --target clean
cmake ..
cmake --build .

链接错误

错误信息:

undefined reference to `xxx'

解决方案:

  1. 检查 CMakeLists.txt 中的链接库配置
  2. 确保所有必需的 Qt 模块都已链接
  3. 检查编译器是否支持所有使用的 C++ 特性

清理构建

清理构建目录

cd build
cmake --build . --target clean

完全清理

# 删除构建目录
rm -rf build

# Windows
rmdir /s /q build

安装

安装到指定目录

cmake --install . --prefix /path/to/install

系统范围安装(Linux)

sudo cmake --install . --prefix /usr/local

打包

Windows

生成便携版 (Portable Zip): 使用 windeployqt 工具打包依赖项:

cd build/bin/Release
windeployqt --release --no-translations EasyKiConverter.exe
# 然后压缩该目录

生成安装包 (Installer .exe): 需要安装 Inno Setup 6

  1. 确保已运行 windeployqt 填充了依赖。
  2. build/bin/Release 内容复制到临时目录 build/Staging
  3. 运行编译器:
    iscc "/DMyAppVersion=3.0.0" "/DSourceDir=path\to\staging" "resources\windows_setup.iss"
    

macOS

使用 macdeployqt 工具打包依赖项:

cd build/bin
macdeployqt EasyKiConverter.app

Linux

创建 AppImage 或使用系统包管理器安装依赖项。

性能优化

启用编译器优化

cmake .. -DCMAKE_BUILD_TYPE=Release

使用链接时优化(LTO)

cmake .. -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON

使用静态链接

cmake .. -DBUILD_SHARED_LIBS=OFF

调试

启用调试符号

cmake .. -DCMAKE_BUILD_TYPE=Debug

使用 GDB 调试

cd build/bin
gdb ./EasyKiConverter

使用 Qt Creator 调试

  1. 在 Qt Creator 中打开项目
  2. 设置断点
  3. 点击 "调试"按钮(或按 F5)

在远程服务器上运行 Qt 应用

EasyKiConverter 是一个 Qt Quick 应用,需要图形界面支持。在远程服务器上运行时,需要配置 X11 转发或使用 VNC。

方案 1: X11 转发(推荐用于简单测试)

步骤:

  1. 在本地 Windows 上安装 X Server:
  2. VcXsrv (推荐): https://sourceforge.net/projects/vcxsrv/
  3. MobaXterm (自带 X Server): https://mobaxterm.mobatek.net/

  4. 配置 SSH 连接:

  5. 使用 PuTTY:在 Connection → SSH → X11 中启用 Enable X11 forwarding
  6. 使用 MobaXterm:X11 转发已自动启用
  7. 使用命令行 SSH:添加 -X 参数

    ssh -X user@server-ip
    

  8. 运行应用:

    export DISPLAY=localhost:10.0  # 通常由 SSH 自动设置
    cd build
    ./bin/EasyKiConverter
    

方案 2: VNC(更稳定)

步骤:

  1. 在服务器上安装 VNC 服务器:

    sudo apt-get install tightvncserver
    

  2. 启动 VNC 服务器:

    vncserver :1
    # 第一次运行时会提示设置密码
    

  3. 在本地使用 VNC 客户端连接:

  4. 下载 RealVNC Viewer 或 TigerVNC
  5. 连接地址: your-server-ip:5901

  6. 运行应用:

    cd build
    ./bin/EasyKiConverter
    

  7. 停止 VNC 服务器(可选):

    vncserver -kill :1
    

方案 3: 使用虚拟显示(用于测试/CI)

步骤:

  1. 安装 Xvfb(虚拟帧缓冲):

    sudo apt-get install xvfb
    

  2. 在虚拟显示中运行应用:

    xvfb-run ./bin/EasyKiConverter
    

注意: 此方案主要用于自动化测试,应用窗口不可见。

推荐做法

对于开发测试,推荐使用 MobaXterm,因为它: - 自带 X Server,无需额外配置 - 支持 SSH、SFTP 等多种协议 - 界面友好,开箱即用

获取帮助

如果遇到编译问题:

  1. 查阅本文档的常见问题部分
  2. 搜索 GitHub Issues
  3. 提交新的 Issue,提供以下信息:
  4. 操作系统版本
  5. Qt 版本
  6. CMake 版本
  7. 编译器版本
  8. 完整的错误信息
  9. CMake 配置命令

版本管理

项目提供了 tools/python/manage_version.py 工具来同步更新版本信息,确保各处版本号一致。

使用方法

# 检查当前版本
python tools/python/manage_version.py --check

# 更新版本到 3.1.0(自动更新以下文件)
python tools/python/manage_version.py 3.1.0

同步的文件

  • vcpkg.json: 更新 "version-string" 字段
  • CMakeLists.txt: 更新默认的 VERSION_FROM_CIqt_add_qml_module 版本
  • src/main.cpp: 更新 app.setApplicationVersion

环境要求

  • Python 3.6+
  • 建议在项目根目录运行

详见: GitHub 工具目录

相关资源

CI/CD 架构

本项目使用 GitHub Actions 实现全自动化 CI/CD。

  • 依赖管理: 使用 vcpkg.json (Manifest Mode) 统一管理 CI 环境依赖。
  • 本地 Actions:
    • setup-env: 统一配置 CMake, Qt, ccache/sccache。
    • get-version: 统一从 Git Tag 提取版本号。
  • 缓存策略: 启用了 Qt 安装缓存、vcpkg 二进制缓存以及 CMake 编译器缓存 (ccache/sccache)。
  • 安全性: 所有工作流均配置了最小权限和并发控制。

详细依赖关系请参考 .github/workflows/WORKFLOW_DEPENDENCIES.md