feat/vtk-merged-dataset-column #10

Merged
gaozheng merged 40 commits from feat/vtk-merged-dataset-column into main 2026-07-01 14:48:38 +08:00
4 changed files with 70 additions and 7 deletions
Showing only changes of commit 065ff3861a - Show all commits

View File

@ -13,6 +13,8 @@ set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
if(MSVC)
# MSVC Release=/MDDebug=/MDdABI ENV_SETUP §9.2
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
add_compile_options(/utf-8 /MP /W4 /permissive-)
# PDB使 Release 使 minidump /
# /Zi /DEBUG PDB/OPT:REF,ICF /DEBUG
@ -31,7 +33,38 @@ endif()
# - Qt GDAL/PROJ/OpenSSL/Eigen/... vcpkg
# =====================================================================
# =====================================================================
#
# Qt 6.11.1 msvc2022_64 + VTK 9.6.x + VS2026-preview
# WARN FATAL VS2026-preview Qt v143 ABI
# docs/ENV_SETUP_Windows.md §4/§5/§9
# =====================================================================
if(WIN32)
# QT_ROOT MSVC Qt kit CMAKE_PREFIX_PATH
if(NOT DEFINED ENV{QT_ROOT} OR "$ENV{QT_ROOT}" STREQUAL ""
OR NOT EXISTS "$ENV{QT_ROOT}/lib/cmake/Qt6")
message(FATAL_ERROR
"QT_ROOT setx QT_ROOT \"<Qt>\\6.11.1\\msvc2022_64\" docs/ENV_SETUP_Windows.md §4")
endif()
endif()
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Network Sql Concurrent)
# Qt major.minor 6.11 VTK/ADS ABI/
if(NOT Qt6_VERSION VERSION_LESS 6.11 AND Qt6_VERSION VERSION_LESS 6.12)
# 6.11.x
else()
message(FATAL_ERROR
"Qt ${Qt6_VERSION} 6.11.x VTK/ADS 6.11.1 msvc2022_64 QT_ROOT docs/ENV_SETUP_Windows.md §4")
endif()
# VTK friendlyfind_package REQUIRED
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/external/vtk-install/lib/cmake/vtk-9.6")
message(FATAL_ERROR
"VTK docs/ENV_SETUP_Windows.md §5.1 Release VTK 9.6.x external/vtk-install")
endif()
# VTK 9 COMPONENTS VTK_LIBRARIES VTK
# VTK_DIRexternal/vtk-installVolume/Filters
find_package(VTK REQUIRED COMPONENTS
@ -42,6 +75,19 @@ find_package(VTK REQUIRED COMPONENTS
FiltersSources
)
# VTK major.minor 9.6VTK_DIR vtk-9.6/
if(VTK_VERSION VERSION_LESS 9.6 OR NOT VTK_VERSION VERSION_LESS 9.7)
message(FATAL_ERROR
"VTK ${VTK_VERSION} 9.6.x docs/ENV_SETUP_Windows.md §5.1 Qt/ external/vtk-install")
endif()
# WARN FATAL Qt msvc2022(v143)VTK app
# std::map/std::string ABI §10 VS2026-preview v143
if(MSVC AND NOT MSVC_TOOLSET_VERSION STREQUAL "143")
message(WARNING
"MSVC v${MSVC_TOOLSET_VERSION} v143 Qt msvc2022(v143) external/vtk-install VTK app ABI docs/ENV_SETUP_Windows.md §9.2")
endif()
# Qt vcpkg
# find_package(GDAL CONFIG REQUIRED)
# find_package(PROJ CONFIG REQUIRED)

View File

@ -12,7 +12,7 @@
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"VCPKG_TARGET_TRIPLET": "x64-windows",
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
"CMAKE_PREFIX_PATH": "D:/Qt/6.11.1/msvc2022_64",
"CMAKE_PREFIX_PATH": "$env{QT_ROOT}",
"VTK_DIR": "${sourceDir}/external/vtk-install/lib/cmake/vtk-9.6"
}
},

View File

@ -42,6 +42,16 @@ if not exist "%CMAKE%" ( echo [build] cmake not found: "%CMAKE%" & exit /b 1 )
REM --- activate MSVC environment (cl / link / include / lib) ---
call "%VCVARS%" >nul
REM --- environment guardrails (fail loud & early, before cmake configure) ---
if not defined QT_ROOT (
echo [build] QT_ROOT is not set. Run: setx QT_ROOT "D:\Qt\6.11.1\msvc2022_64" ^(see docs/ENV_SETUP_Windows.md^), then reopen the terminal.
exit /b 1
)
if not defined VCPKG_ROOT (
echo [build] VCPKG_ROOT is not set. Run: setx VCPKG_ROOT "C:\dev\vcpkg" ^(see docs/ENV_SETUP_Windows.md^), then reopen the terminal.
exit /b 1
)
set "CMD=%~1"
if "%CMD%"=="" set "CMD=app"

View File

@ -68,9 +68,14 @@ setx VCPKG_ROOT "C:\dev\vcpkg" # 永久;新开终端生效
1. 用官方在线安装器(或已装则开 `D:\Qt\MaintenanceTool.exe`)→ Add or remove components → 登录 Qt 账号。
2. 展开 Qt → **Qt 6.11.1**,勾选 **MSVC 2022 64-bit**,安装。
3. 完成后应存在 `D:\Qt\6.11.1\msvc2022_64\lib\cmake\Qt6`
4. 预设通过 `CMAKE_PREFIX_PATH=D:/Qt/6.11.1/msvc2022_64` 找到它§6。**全链路只此一份 Qt。**
4. **设 `QT_ROOT` 环境变量指向该 kit**(与 `VCPKG_ROOT` 同一套路,预设 `CMAKE_PREFIX_PATH=$env{QT_ROOT}` 读它§6
```powershell
setx QT_ROOT "<你的路径>\6.11.1\msvc2022_64" # 永久;新开终端生效
```
**全链路只此一份 Qt。** 版本仍须是 **6.11.1**(换版本可能与源码编的 VTK/ADS 不匹配)。
> 若你的 Qt 装在别处/别的版本:**改预设/环境的 `CMAKE_PREFIX_PATH` 指向你的 `msvc2022_64`,但版本仍须是 6.11.1**(换版本可能与源码编的 VTK/ADS 不匹配)。
> 若你的 Qt 装在别处/别的版本:**改 `QT_ROOT` 指向你的 `msvc2022_64` 即可**,无需动预设;但版本仍须是 6.11.1。
> 未设 `QT_ROOT` 时:`build.bat` 会立即报 `[build] QT_ROOT is not set...` 并退出;直接跑 cmake 则配置期 `FATAL_ERROR: QT_ROOT 未设置或无效`
---
@ -125,7 +130,7 @@ git clone --branch qwt-6.2 https://git.code.sf.net/p/qwt/git external/qwt-src
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"VCPKG_TARGET_TRIPLET": "x64-windows",
"CMAKE_PREFIX_PATH": "D:/Qt/6.11.1/msvc2022_64",
"CMAKE_PREFIX_PATH": "$env{QT_ROOT}",
"VTK_DIR": "${sourceDir}/external/vtk-install/lib/cmake/vtk-9.6"
}
},
@ -135,7 +140,7 @@ git clone --branch qwt-6.2 https://git.code.sf.net/p/qwt/git external/qwt-src
]
}
```
- **预设确实设 `CMAKE_PREFIX_PATH`(官方 Qt+ `VTK_DIR`(源码编的 VTK**——这是「方案②-修订」的核心,别按旧文档去掉它。
- **预设确实设 `CMAKE_PREFIX_PATH`(官方 Qt,读 `$env{QT_ROOT}`+ `VTK_DIR`(源码编的 VTK,仓库相对、无需环境变量**——这是「方案②-修订」的核心,别按旧文档去掉它。`QT_ROOT` 未 setx 时配置期会 FATAL§4
- vcpkg 只经 `CMAKE_TOOLCHAIN_FILE` 管非 Qt 依赖triplet `x64-windows`
### 6.2 根 `CMakeLists.txt` 要点
@ -181,7 +186,7 @@ build.bat configure # CMakeLists 改动后强制重跑 configure
### 9.1 前置就位
- [ ] `cl` / `cmake`(≥3.21) / `ninja` / `git` 可用;`VCPKG_ROOT` 已设。
- [ ] Qt **6.11.1****`msvc2022_64`**MSVC非 MinGW存在于 `CMAKE_PREFIX_PATH` 指向处;`.../msvc2022_64/lib/cmake/Qt6` 在
- [ ] `QT_ROOT` 已 setx 指向 **6.11.1 `msvc2022_64`** kitMSVC非 MinGW`$QT_ROOT/lib/cmake/Qt6` 在(预设 `CMAKE_PREFIX_PATH=$env{QT_ROOT}` 读它;未设则配置期 FATAL
- [ ] `external/vtk-install/lib/cmake/vtk-9.6` 存在VTK 已源码编 install
- [ ] `external/qwt-src/src` 存在(如需详情页图表)。
- [ ] `vcpkg.json``builtin-baseline` 未被改动。
@ -205,7 +210,9 @@ build.bat configure # CMakeLists 改动后强制重跑 configure
| 现象 | 根因 | 处理 |
|---|---|---|
| **点对象树/渲染时,崩在 `std::_Tree::_Find_lower_bound``std::map`/`set` 查找),`_Myhead` 是 `0xFFFF...` 之类垃圾值,读取访问冲突** | **STL ABI 不匹配**Debug/Release 混链、`/MD` vs `/MDd`、`_ITERATOR_DEBUG_LEVEL` 不一致、或工具集不匹配(最常见:**别处/别配置的 VTK/Qt**,或 **Debug app 链 Release 依赖** | 按 §9.2 逐项核对;**删 `build/` 全 Release 干净重建**;确认 VTK 是 §5.1 那份 |
| 链接期报「找不到 Qt6::/VTK::」 | 预设 `CMAKE_PREFIX_PATH`/`VTK_DIR` 指向不存在 | 按 §4/§5 就位或改预设路径 |
| 配置期 `FATAL_ERROR: QT_ROOT 未设置或无效` / `build.bat``[build] QT_ROOT is not set` | 未 setx `QT_ROOT` 或指向的 kit 不含 `lib/cmake/Qt6` | `setx QT_ROOT "<你的Qt>\6.11.1\msvc2022_64"` 后**重开终端**§4 |
| 配置期 `FATAL_ERROR: Qt 版本不匹配` / `VTK 版本不匹配` / `VTK 未就位` | 装了非 6.11.x Qt、非 9.6.x VTK`external/vtk-install` 缺失 | 按 §4/§5 装对版本/就位 VTK |
| 链接期报「找不到 Qt6::/VTK::」 | 预设 `CMAKE_PREFIX_PATH`(`$env{QT_ROOT}`)/`VTK_DIR` 指向不存在 | 按 §4/§5 就位或修正 `QT_ROOT` |
| 配置报「add_subdirectory ... 不是已存在目录」 | 引用了未随仓库的目录(如误提交本地临时工具目录) | 从 `CMakeLists.txt` 去掉该引用,或补齐该目录 |
| 详情页图表缺失但不报错 | `external/qwt-src` 未就位§5.3 | 克隆 Qwt 后重配置 |
| 双 Qt / 起不来找不到 platform 插件 | 混入了 vcpkg/别处的 Qt dll | 只用官方 `windeployqt` 对齐单一 Qt |