CMake 工程模板:VS2022 + Boost(静态库)

这是一个可直接复制的 Boost 工程模板(VS2022 + CMake + Ninja)。模板的作用:新建 Boost 项目时不用每次从零配置——复制模板、改项目名、加源文件即可。整套约定是:CMake 为唯一构建系统、依赖走环境变量 + find_package、构建输出在 out/build/、不写死路径。 前置环境变量: BOOST_ROOT = <Boost根目录> Boost 是静态库(vc143 构建),不用加 PATH,运行时不需要 dll 一、目录结构 <项目根目录>\BoostTemplate\ ├── CMakeLists.txt ├── CMakePresets.json ├── .gitignore ├── src\ │ └── main.cpp └── out\ └── build\ 二、CMakeLists.txt(复制到项目根目录) cmake_minimum_required(VERSION 3.20) project(BoostTemplate LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # ---------- Boost ---------- # BOOST_ROOT 由 CMakePresets.json 从环境变量注入,这里不写路径 set(Boost_NO_SYSTEM_PATHS ON) # 只从 BOOST_ROOT 找,不扫系统路径 set(Boost_USE_STATIC_LIBS ON) # 用静态库(vc143 静态构建) set(Boost_USE_MULTITHREADED ON) # 多线程版本 find_package(Boost 1.81 REQUIRED COMPONENTS filesystem system thread) # ---------- 源文件 ---------- set(SOURCES src/main.cpp ) add_executable(${PROJECT_NAME} ${SOURCES}) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ) target_link_libraries(${PROJECT_NAME} PRIVATE Boost::filesystem Boost::system Boost::thread ) 三、CMakePresets.json(复制到项目根目录) { "version": 3, "configurePresets": [ { "name": "debug", "generator": "Ninja", "binaryDir": "${sourceDir}/out/build/${presetName}", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", "BOOST_ROOT": "$env{BOOST_ROOT}", "Boost_NO_SYSTEM_PATHS": "ON", "Boost_USE_STATIC_LIBS": "ON", "Boost_USE_MULTITHREADED": "ON" } }, { "name": "release", "inherits": "debug", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } } ], "buildPresets": [ { "name": "debug", "configurePreset": "debug" }, { "name": "release", "configurePreset": "release" } ] } 版本待核实:预设文件 "version": 3 与 CMakeLists.txt 里 cmake_minimum_required(VERSION 3.20) 的版本要求是否匹配(version 3 预设需较新的 CMake),首次配置前请确认本机 / VS2022 自带 CMake 的实际版本。 ...

2026 年 10 月 13 日

CMake 工程模板:VS2022 + OpenCV 4.10

这是一个可直接复制的 OpenCV 工程模板(VS2022 + CMake + Ninja)。模板的作用:新建 OpenCV 项目时不用每次手动加 include/lib 路径——复制模板、改项目名、加源文件即可。整套约定是:CMake 为唯一构建系统、依赖走环境变量 + find_package、构建输出在 out/build/、不写死路径。 前置环境变量: OpenCV_DIR = <OpenCV安装目录>\build\x64\vc16\lib PATH 追加:<OpenCV安装目录>\build\x64\vc16\bin 一、目录结构 <项目根目录>\OpenCVTemplate\ ├── CMakeLists.txt ├── CMakePresets.json ├── .gitignore ├── src\ │ └── main.cpp └── out\ └── build\ 二、CMakeLists.txt(复制到项目根目录) cmake_minimum_required(VERSION 3.20) project(OpenCVTemplate LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # ---------- OpenCV ---------- # OpenCV_DIR 由 CMakePresets.json 从环境变量注入,这里不写路径 find_package(OpenCV REQUIRED) # ---------- 源文件 ---------- set(SOURCES src/main.cpp ) add_executable(${PROJECT_NAME} ${SOURCES}) target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${OpenCV_INCLUDE_DIRS} ) target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_LIBS} ) 三、CMakePresets.json(复制到项目根目录) { "version": 3, "configurePresets": [ { "name": "debug", "generator": "Ninja", "binaryDir": "${sourceDir}/out/build/${presetName}", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", "OpenCV_DIR": "$env{OpenCV_DIR}" } }, { "name": "release", "inherits": "debug", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } } ], "buildPresets": [ { "name": "debug", "configurePreset": "debug" }, { "name": "release", "configurePreset": "release" } ] } 版本待核实:预设文件 "version": 3 与 CMakeLists.txt 里 cmake_minimum_required(VERSION 3.20) 的版本要求是否匹配(version 3 预设需较新的 CMake),首次配置前请确认本机 / VS2022 自带 CMake 的实际版本。 ...

2026 年 10 月 13 日

Windows 上 Boost + OpenCV + CMake 的环境配置方案:只配两件事

从零配置的一套通用方案:环境变量 + CMakePresets.json。一次配好,所有项目通用。Windows 端只配 Boost + OpenCV,不配 Qt(Qt 开发放在 Linux 端)。 文中 <OpenCV安装目录>、<Boost根目录>、<项目根目录> 为占位符,替换成本机实际目录即可。 一、环境变量(系统变量) 在 Windows「系统属性 → 环境变量」里,系统变量新建: 变量名 值 作用 OpenCV_DIR <OpenCV安装目录>\build\x64\vc16\lib OpenCV 的 Config.cmake 所在目录 BOOST_ROOT <Boost根目录> Boost 根目录 PATH 追加(运行时找 dll): <OpenCV安装目录>\build\x64\vc16\bin Boost 不用加 PATH,静态库,运行时不需要 dll。 二、每个库的配置细节 OpenCV 关键文件(示例路径): <OpenCV安装目录>\build\x64\vc16\lib\OpenCVConfig.cmake <OpenCV安装目录>\build\x64\vc16\lib\opencv_world4100.lib <OpenCV安装目录>\build\x64\vc16\lib\opencv_world4100d.lib 变量: OpenCV_DIR = <OpenCV安装目录>\build\x64\vc16\lib CMake 里: find_package(OpenCV REQUIRED) target_include_directories(main PRIVATE ${OpenCV_INCLUDE_DIRS}) target_link_libraries(main PRIVATE ${OpenCV_LIBS}) Boost 关键文件(示例路径): <Boost根目录>\stage\lib\cmake\Boost-1.81.0\BoostConfig.cmake <Boost根目录>\stage\lib\libboost_filesystem-vc143-mt-x64-1_81.lib <Boost根目录>\stage\lib\libboost_filesystem-vc143-mt-gd-x64-1_81.lib 变量: BOOST_ROOT = <Boost根目录> CMake 里: set(Boost_NO_SYSTEM_PATHS ON) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_MULTITHREADED ON) find_package(Boost 1.81 REQUIRED COMPONENTS filesystem system thread) target_link_libraries(main PRIVATE Boost::filesystem Boost::system Boost::thread) 注意:Boost 大部分是 header-only,find_package 只对需要编译的库(filesystem、system、thread 等)起作用。header-only 的库直接 #include 就行,CMake 里不用 find_package。 ...

2026 年 10 月 13 日