ci: build Windows release package
Some checks failed
Build Windows Release / build-windows (push) Has been cancelled

This commit is contained in:
luochen570
2026-05-29 22:59:55 +08:00
parent 8c9a92f2cb
commit 2a70d6245e
9 changed files with 183 additions and 224 deletions

133
README.md
View File

@@ -6,7 +6,7 @@ chengnan基于 Qt 与 OpenCV 的图像显示与处理系统
## 当前实现状态
本项目已初始化为一个 Qt Widgets + OpenCV + CMake 的 C++ 图像处理应用。当前构建策略已调整为:**在 Linux 中编译,不使用 Windows 编译工具链;所有构建项目所需工具和依赖均采用项目目录内的二进制安装方式,不使用源码编译安装依赖。**
本项目已初始化为一个 Qt Widgets + OpenCV + CMake 的 C++ 图像处理应用。当前发布目标为:**Windows x64 桌面应用**,使用 MSVC、Qt Windows 运行时、OpenCV Windows 预编译 DLL 构建并打包Linux 构建仅作为代码验证用途。
已实现功能:
@@ -24,59 +24,80 @@ chengnan基于 Qt 与 OpenCV 的图像显示与处理系统
- 基于 HSV 均值的简单规则分类
- 使用 `QThread` + 信号槽执行 OpenCV 处理任务,避免阻塞 UI
## Linux 二进制构建原则
## Windows 发布与隔离依赖原则
本项目后续构建以 Linux 环境为准,要求如下:
本项目发布目标为 Windows x64 桌面应用,要求如下:
-Linux 中编译本项目
- 使用 Windows 编译工具链
- 不使用 `cl.exe``windeployqt.exe`、Windows `cmake.exe`、Windows `ninja.exe` 构建本项目
-使用当前系统上的 GCC / G++ 作为项目构建工具链
- 不全局安装 Qt、OpenCV、CMake、Ninja、Python 包等依赖
- 不污染系统 `/usr``/usr/local`、系统 Python site-packages 或全局环境变量
- 所有构建项目所需工具和依赖必须放在项目目录内
- 所有构建项目所需依赖必须优先使用官方或可信来源的二进制包
- 不使用源码编译安装 Qt / OpenCV 等依赖
- Python 使用项目目录内虚拟环境,不使用 uv 安装或管理环境
- 构建脚本只能临时设置当前进程环境变量,不能修改系统环境变量
-Windows x64 + Visual Studio MSVC 环境中构建发布包
- 使用 `cl.exe`、Windows `cmake.exe`、Windows `ninja.exe``windeployqt.exe` 构建和部署
- Qt、OpenCV、CMake、Ninja 等依赖优先使用项目目录内二进制包或 CI 缓存中的可信二进制包
-把 Qt/OpenCV 安装到系统目录,不修改系统全局环境变量
- 发布包必须包含 `chengnan.exe`、Qt 运行时、Qt plugins、OpenCV DLL 和校验文件
- Linux 构建脚本仅用于代码验证,不作为最终发布制品来源
推荐目录约定:
推荐 Windows 依赖目录约定:
```text
chengnan/
├── tools/
│ ├── cmake-linux/ # Linux 版 CMake 二进制
── ninja-linux/ # Linux 版 Ninja 二进制
│ ├── compiler-linux/ # Linux 版二进制编译器工具链,如 LLVM/Clang
│ ├── python-bin/ # Python 二进制包
│ └── python-venv/ # Python 虚拟环境
│ ├── cmake-current-windows/ # Windows 版 CMake
── python-bin/ # 可选:项目内 Python 二进制
├── third_party/
│ ├── qt-linux/ # Linux 版 Qt 二进制包
── opencv-linux/ # Linux 版 OpenCV 二进制
└── build-linux/ # Linux 构建输出目录
│ ├── qt-windows-msvc/ # Windows 版 Qt MSVC
── opencv-windows/ # Windows 版 OpenCV 预编译
│ └── qt-tools/ # Ninja 等 Qt 工具
├── build-windows/ # Windows 构建输出目录
└── dist-windows/ # Windows 发布包输出目录
```
> 注意:如果 OpenCV 没有适配当前 Linux 发行版的官方二进制包,不应退回源码编译安装。应改为寻找可信的预编译包、容器化二进制 SDK、发行版无污染解包方案或更换依赖来源
> 注意:Windows 发布包依赖 Qt 与 OpenCV Windows 预编译二进制。CI Runner 必须能访问这些依赖,或仓库/缓存中已经准备好对应目录
## 编译工具链与版本声明
本项目当前已验证的 Linux 二进制工具链如下,全部位于项目目录内的 `tools/linux-build-env/`,不依赖全局安装的 Qt / OpenCV / CMake / Ninja也不使用 Windows 编译工具链。
本项目发布目标为 Windows x64推荐工具链如下
| 工具 / 依赖 | 当前版本 | 项目内路径 | 说明 |
| --- | --- | --- | --- |
| micromamba | 2.6.2 | `tools/micromamba/bin/micromamba` | 仅用于在项目目录内获取二进制包 |
| CMake | 4.3.3 | `tools/linux-build-env/bin/cmake` | CMake 最低要求 3.21,当前验证版本 4.3.3 |
| Ninja | 1.13.2 | `tools/linux-build-env/bin/ninja` | CMake 使用 `-G Ninja` 生成构建系统 |
| Clang / Clang++ | 22.1.6 | `tools/linux-build-env/bin/clang++` | 本项目指定使用项目内 Clang不使用系统 GCC / G++ |
| Qt | 5.15.15 | `tools/linux-build-env/``third_party/qt-linux` | 使用 Qt Widgets / Qt ConcurrentCMake 也兼容 Qt6 |
| OpenCV | 4.13.0 | `tools/linux-build-env/``third_party/opencv-linux` | 使用 `core``imgproc``imgcodecs` 组件 |
| C++ 标准 | C++17 | `CMakeLists.txt` | `CMAKE_CXX_STANDARD 17` |
| 工具 / 依赖 | 项目内路径 | 说明 |
| --- | --- | --- |
| Visual Studio Build Tools / MSVC | Runner 系统环境 | 提供 `cl.exe`,需通过 x64 Native Tools 或 `msvc-dev-cmd` 初始化 |
| CMake | `tools/cmake-current-windows/bin/cmake.exe` | CMake 最低要求 3.21 |
| Ninja | `third_party/qt-tools/Tools/Ninja/ninja.exe` | CMake 使用 `-G Ninja` 生成构建系统 |
| Qt | `third_party/qt-windows-msvc` | 使用 Qt Widgets / Qt Concurrent部署时调用 `windeployqt.exe` |
| OpenCV | `third_party/opencv-windows/x64/vc16` | 使用 `core``imgproc``imgcodecs` 组件,发布时复制 DLL |
| C++ 标准 | `CMakeLists.txt` | `CMAKE_CXX_STANDARD 17` |
> 说明:`third_party/qt-linux` 和 `third_party/opencv-linux` 是指向 `tools/linux-build-env` 的项目内软链接,方便保持 README 中的依赖目录语义;真正的二进制依赖仍统一存放在 `tools/linux-build-env/`
Linux 二进制工具链仍可用于代码验证,但不作为发布包来源
## 如何构建
### 一键构建
### Windows 发布构建
本项目目标是 Windows 桌面应用。推荐在 Windows x64 + Visual Studio MSVC 环境中构建,仓库内 Windows 依赖约定如下:
```text
third_party/qt-windows-msvc/
third_party/opencv-windows/x64/vc16/
third_party/qt-tools/Tools/Ninja/ninja.exe
tools/cmake-current-windows/bin/cmake.exe
```
在 Windows Runner 或 “x64 Native Tools Command Prompt for VS” 中执行:
```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\package-windows-release.ps1 -Toolchain msvc
```
生成的发布包:
```text
dist-windows/chengnan-windows-x86_64.zip
dist-windows/chengnan-windows-x86_64.zip.sha256
```
发布包内包含 `chengnan.exe`、Qt 运行时、Qt plugins 和 OpenCV DLL。解压后双击 `chengnan.exe` 运行。
### Linux 本地验证构建
Linux 构建仅用于本地验证 Qt/OpenCV 代码,不作为最终 Windows 发布包。
在 Linux 中进入项目目录执行:
@@ -97,29 +118,6 @@ cd /root/chengnan
build-linux/chengnan
```
### 生成发布包
如需生成可分发的 Linux x86_64 发布包,执行:
```bash
cd /root/chengnan
./scripts/package-linux-release.sh
```
脚本会先执行 Release 构建,再将程序、项目内 Qt/OpenCV 运行时库、Qt 插件和启动脚本打包到:
```text
dist-linux/chengnan-linux-x86_64.tar.gz
dist-linux/chengnan-linux-x86_64.tar.gz.sha256
```
解压后在有 X11 / Wayland 图形会话的 Linux 桌面环境中运行:
```bash
tar -xzf chengnan-linux-x86_64.tar.gz
./chengnan-linux-x86_64/run-chengnan.sh
```
### 分步构建
如果希望先准备依赖,再单独构建:
@@ -194,7 +192,7 @@ tools/cmake.tar.gz
## 当前项目内已有的二进制依赖记录
当前目录中仍保留过 Windows 方案准备的二进制和脚本,作为历史记录和可选参考,但**后续 Linux 构建不应使用这些 Windows 工具链**
当前目录中准备或约定了 Windows 方案所需的二进制依赖和脚本:
```text
third_party/qt-windows-msvc-sdk/
@@ -223,11 +221,11 @@ tools/cmake-current-windows/bin/cmake.exe
tools/python-bin/python.exe
```
这些 Windows 二进制内容不满足“在 Linux 里面编译,不使用 Windows 编译工具链”的新要求,因此 Linux 构建流程不应引用它们。
这些 Windows 二进制内容是发布包构建所需依赖Linux 验证构建不会引用它们。
## Linux 构建目标
## Linux 验证构建说明
后续应补充或替换为 Linux 二进制依赖:
如需在 Linux 上做代码验证,可使用项目内 Linux 二进制依赖:
- Linux 版 CMake 二进制包
- Linux 版 Ninja 二进制包
@@ -385,9 +383,8 @@ export CMAKE_PREFIX_PATH="$PWD/third_party/qt-linux;$PWD/third_party/opencv-linu
要求:
-Linux 中编译本项目
- 不使用 Windows 编译工具链
- 不使用系统 GCC / G++ 作为项目构建工具链
- Windows 发布包Windows x64 + MSVC 环境中构建
- Linux 构建仅用于本地代码验证
- 不使用源码编译安装 Qt / OpenCV 等依赖
- 不建议直接全局安装 Qt 或 OpenCV
- 不建议污染系统 `/usr``/usr/local` 等全局路径
@@ -424,7 +421,7 @@ chengnan/
│ ├── ImageWorker.cpp
│ └── ImageConverter.cpp
├── docs/
│ └── windows/ # 历史 Windows 依赖说明和脚本,仅作参考,不参与 Linux 构建
│ └── windows/ # Windows 依赖说明和构建脚本
├── scripts/
│ ├── setup-linux-binary-deps.sh
│ ├── setup-python-venv-linux.sh
@@ -502,7 +499,7 @@ export LD_LIBRARY_PATH="$PWD/third_party/qt-linux/lib:$PWD/third_party/opencv-li
- 图像显示使用 QWidget 体系,不使用 `cv::imshow`
- 图像处理任务不会明显阻塞 UI
- 依赖安装和构建必须限制在项目目录内,不污染系统环境
- 在 Linux 中编译,不使用 Windows 编译工具链
- Windows 发布包可通过 Windows x64 + MSVC 构建生成
- 所有工具和依赖使用二进制包或解压式安装,不使用源码编译安装
## 注意事项