# CMake 配置文档 本文档总结了 `image_capture` 项目的 CMake 构建系统配置。 --- ## 目录结构 ``` image_capture/ ├── CMakeLists.txt # 主构建配置文件 └── cmake/ # CMake 模块目录 ├── CompilerOptions.cmake # 编译器选项配置 ├── Dependencies.cmake # 外部依赖管理 └── PercipioSDK.cmake # 相机 SDK 配置 ``` --- ## 主配置文件:[CMakeLists.txt](file:///d:/Git/stereo_warehouse_inspection/image_capture/CMakeLists.txt) ### 基本信息 - **CMake 最低版本**: 3.10 - **项目名称**: `image_capture` - **编程语言**: C++ - **构建生成器**: Visual Studio 17 2022 (MSVC) ### 输出目录 ```cmake CMAKE_RUNTIME_OUTPUT_DIRECTORY = ${CMAKE_BINARY_DIR}/bin/Release # 可执行文件 CMAKE_LIBRARY_OUTPUT_DIRECTORY = ${CMAKE_BINARY_DIR}/lib/Release # 动态库 CMAKE_ARCHIVE_OUTPUT_DIRECTORY = ${CMAKE_BINARY_DIR}/lib/Release # 静态库 ``` ### 模块化设计 项目采用模块化的 CMake 配置,通过 `cmake/` 目录下的三个模块文件组织: 1. **CompilerOptions.cmake** - 编译器和全局设置 2. **Dependencies.cmake** - Qt6、OpenCV、Open3D 依赖 3. **PercipioSDK.cmake** - 图漾相机 SDK 配置 ### 库和可执行文件 #### 1. Algorithm Library (`algorithm_lib`) **类型**: 静态库 **源文件**: - `src/algorithm/core/detection_base.cpp` - `src/algorithm/core/detection_result.cpp` - `src/algorithm/utils/image_processor.cpp` - `src/algorithm/detections/slot_occupancy_detection.cpp` - `src/algorithm/detections/pallet_offset_detection.cpp` - `src/algorithm/detections/beam_rack_deflection_detection.cpp` - `src/algorithm/detections/visual_inventory_detection.cpp` - `src/algorithm/detections/visual_inventory_end_detection.cpp` **包含路径**: - `src` - `third_party/percipio/common` (修复 json11.hpp 引用) **依赖**: OpenCV, Open3D #### 2. Main Executable (`image_capture`) **类型**: 可执行文件 **主要源文件**: - `src/main.cpp` - `src/camera/ty_multi_camera_capture.cpp` - `src/camera/mvs_multi_camera_capture.cpp` - `src/device/device_manager.cpp` - `src/redis/redis_communicator.cpp` - `src/task/task_manager.cpp` - `src/vision/vision_controller.cpp` - `src/common/log_manager.cpp` - `src/common/config_manager.cpp` - `src/gui/mainwindow.cpp` / `.h` / `.ui` **链接的库**: - `algorithm_lib` (项目内部算法库) - `cpp_api_lib` (相机 SDK C++ API 封装) - `tycam` (相机 SDK 动态库) - `${OpenCV_LIBS}` (OpenCV 库) - `Open3D::Open3D` (Open3D 库) - `Qt6::Core` 和 `Qt6::Widgets` (Qt 框架) - `MvCameraControl.lib` (海康 MVS SDK) ### 测试配置 - **选项**: `BUILD_TESTS` (默认 ON) - **测试目录**: `tests/` (通过 `add_subdirectory` 添加) --- ## CMake 模块详解 ### 1. [CompilerOptions.cmake](file:///d:/Git/stereo_warehouse_inspection/image_capture/cmake/CompilerOptions.cmake) #### C++ 标准 - **标准**: C++17 - **要求**: 必须支持 #### Qt 自动化工具 ```cmake CMAKE_AUTOMOC ON # 自动 Meta-Object Compiler CMAKE_AUTORCC ON # 自动 Resource Compiler CMAKE_AUTOUIC ON # 自动 UI Compiler ``` #### 编译器优化选项 (MSVC) **Release 模式** (默认): ```cmake /O2 # 优化速度 /Ob2 # 内联任何合适的函数 /Oi # 启用内建函数 /Ot # 代码速度优先 /Oy # 省略帧指针 /GL # 全局程序优化 ``` **Debug 模式**: ```cmake /Od # 禁用优化 /Zi # 生成完整调试信息 ``` #### 其他设置 - **定义**: `OPENCV_DEPENDENCIES` - **compile_commands.json**: 自动生成(用于 IDE 智能提示) --- ### 2. [Dependencies.cmake](file:///d:/Git/stereo_warehouse_inspection/image_capture/cmake/Dependencies.cmake) #### Qt6 配置 ```cmake find_package(Qt6 REQUIRED COMPONENTS Widgets) ``` #### OpenCV 配置 ```cmake find_package(OpenCV REQUIRED) ``` #### Open3D 配置 ```cmake find_package(Open3D REQUIRED) ``` 用于点云处理和算法运算。 --- ### 3. [PercipioSDK.cmake](file:///d:/Git/stereo_warehouse_inspection/image_capture/cmake/PercipioSDK.cmake) #### 相机 SDK 路径配置 ```cmake CAMPORT3_ROOT = ${CMAKE_CURRENT_SOURCE_DIR}/camera_sdk CAMPORT3_LIB_DIR = ${CAMPORT3_ROOT}/lib/win/x64 ``` #### 导入 tycam 动态库 ```cmake add_library(tycam SHARED IMPORTED) ``` #### C++ API 封装库 (`cpp_api_lib`) **类型**: 静态库 **源文件**: `camera_sdk/sample_v2/cpp/*`, `camera_sdk/common/*` **依赖**: OpenCV --- ## 构建流程 ### 配置项目 ```bash cd image_capture/build cmake .. ``` 可选参数: ```bash -DOpenCV_DIR= # 指定 OpenCV 路径 -DQt6_DIR= # 指定 Qt6 路径 -DOpen3D_DIR= # 指定 Open3D 路径 ``` ### 编译项目 ```bash cmake --build . --config Release # 或 cmake --build . --config Debug ``` --- ## 依赖项总结 | 依赖项 | 版本要求 | 用途 | |--------|---------|------| | CMake | ≥ 3.10 | 构建系统 | | C++ | C++17 | 编程语言标准 | | Qt6 | Widgets 组件 | GUI 框架 | | OpenCV | 4.x | 图像处理 | | Open3D | 0.17+ | 3D点云处理 | | Percipio SDK | tycam.dll | 相机驱动 | | MSVC | VS2022 (v143) | 编译器 | --- ## 维护建议 1. **环境一致性**: 确保所有依赖项(Qt, OpenCV, Open3D)都是使用 MSVC 编译的 x64 版本。 2. **DLL 管理**: 运行时确保所有必要的 DLL 都在可执行文件目录下。 3. **版本检测**: 保持 Open3D 和 OpenCV 版本的一致性,避免 ABI 冲突。 --- *文档更新时间: 2025-12-19*