静态编译xmly-downloader-qt5:qt5-static + AppVeyor实现三平台CI自动构建指南
【免费下载链接】xmly-downloader-qt5喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用Go+Qt5编写(Not Qt Binding).项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5
xmly-downloader-qt5 是一款基于Go + Qt5编写的喜马拉雅FM专辑下载器(GUI),支持解析VIP与付费专辑。本文将围绕「静态编译」这一核心主题,带你用qt5-static + AppVeyor一套脚本 + CI矩阵,自动产出 Windows / Linux / macOS 三平台可分发的绿色版程序包——无需在每台机器上手工装 Qt。
一、为什么要静态编译?新手先看这里 🎯
用普通方式编译 Qt 程序时,生成的 exe 依赖目标机器上的 Qt 动态库,缺一个.dll就闪退。而静态编译会把 Qt5 的所有依赖直接打包进可执行文件,做到「拷走即运行」。
- 省心:用户不需要安装任何 Qt 运行库
- 省空间:单个文件就是一个完整应用
- 关键点:使用 qt5-static 提供的预编译静态 Qt5 包(5.14 / 5.15),免去自己源码编译 Qt 数小时的等待
💡 本项目的构建思路在 ci/appveyor_build.ps1 中完整实现,三平台共用一条流程。
二、项目结构:看懂 Go 与 Qt5 如何「牵手」
xmly-downloader-qt5 不是用 Qt 的 Binding 方案,而是让两种语言各司其职:
- Go 负责下载核心:
src/cgoqt/目录下的 xmly_downloader.go 实现专辑解析、音频下载等核心逻辑,通过 cgo 以 C 静态库形式导出(接口声明见 cgo.h,依赖见 go.mod) - C++ 负责界面:Qt Widgets 界面代码位于
src/ui/与src/runnables/,工程文件为 src/xmly-downloader-qt5.pro,其中一行LIBS += $$PWD/cgoqt/xmlydownloader.a把 Go 库接进 Qt 工程
程序主界面支持专辑解析、Cookie/二维码登录、批量多选下载,静态编译后效果如下:
三、三平台构建流程:一条 PowerShell 脚本走天下
ci/appveyor_build.ps1 通过CI_WINDOWS/CI_LINUX/CI_MACOS环境变量分流,三个平台的步骤高度一致,可拆成 5 步记忆:
1. 下载并解压对应平台的 qt5-static 静态包
| 平台 | 静态包 | 额外依赖 |
|---|---|---|
| Windows | qt5-static-win32 | MinGW(msys64) |
| Linux | qt5-static-linux | libglib2.0-dev、libxkbcommon-dev |
| macOS | qt5-static-osx | 无 |
2. 把静态 Qt 的 bin 目录加入 PATH
脚本统一将qt5-static/.../bin放到PATH最前,保证qmake、make都指向静态版 Qt。
3. 编译 Go 核心为 C 静态库
进入src/cgoqt,执行go build -buildmode=c-archive,产出xmlydownloader.a。
4. qmake + make 编译 Qt 工程
qmake CONFIG+=release ../src/xmly-downloader-qt5.pro make -j2 # Windows 下为 mingw32-make -j25. 打包产物
- Windows:复制
xmly-downloader-qt5.exe,用 7z 压缩为xmly-downloader-qt5_windows_v版本号.zip - Linux:额外生成一个
.sh启动脚本,再tar.gz压缩 - macOS:直接对
xmly-downloader-qt5.app打包
四、CI 矩阵自动化:三平台一次 Push 全部构建 🔁
仓库中的 .github/workflows/build_qmake.yml 把上面的流程搬进了 CI 矩阵,要点如下:
- 触发条件:
master分支上src/**或工作流文件变更时自动运行(Push 与 PR 均可) - 构建矩阵:
windows-latest/ubuntu-latest/macos-latest三节点并行,fail-fast: false保证单个平台失败不拖累其他平台 - 环境准备:Linux 固定 gcc-9;Go 由 setup-go 自动安装;qt5-static 5.15 按平台下载并解压
- 统一构建入口:Linux/macOS 直接执行
ci/build.sh,Windows 通过 msys2 的 MinGW shell 执行,实现一套脚本三平台通用 - 产物上传:三平台分别产出
.7z/.tar.xz制品,最后由upload任务汇聚并推送到网盘(WebDAV),方便用户下载
静态编译产物开箱即用的下载管理界面(批量任务 + 进度条):
构建成功后的绿色版单文件程序,支持多主题切换,例如「淡蓝」主题:
五、常见问题 FAQ ❓
Q1:Linux 上 make 报 xcb 相关错误怎么办?按 CI 脚本补装依赖:libxcb*、libx11-xcb-dev、libxkbcommon-x11-dev(见 build_qmake.yml 的 Install Libs 步骤)。
Q2:为什么 Windows 端要用 msys2?静态包需要 MinGW 工具链编译,msys2 提供mingw32-make与 gcc,是 Windows 下最顺手的 Qt 构建环境。
Q3:版本号是哪里来的?CI 使用构建版本号变量(如$env:APPVEYOR_BUILD_VERSION)拼进文件名,保证每次自动构建的包名唯一、可追溯。
Q4:本地手动构建可以吗?可以。按 README.md 的 Build 章节:先把 Qt 的bin加入 PATH,再进src/cgoqt执行go build -buildmode=c-archive,最后用 Qt Creator 导入 src/xmly-downloader-qt5.pro 编译即可。
六、小结
本文以静态编译为主线,介绍了 xmly-downloader-qt5 如何用 qt5-static 免依赖打包、如何用一条 PowerShell 脚本覆盖三平台构建、再用 CI 矩阵实现「Push 即出包」。照着 ci/appveyor_build.ps1 与 build_qmake.yml 的结构,你也能为自己的 Qt + Go 混合项目快速搭起跨平台自动构建流水线 🚀
⚠️ 提醒:本工具仅供学习交流,所下载音频版权归喜马拉雅FM所有,请遵守平台规则、勿用于商业用途。
【免费下载链接】xmly-downloader-qt5喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用Go+Qt5编写(Not Qt Binding).项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考