从零配置的一套通用方案:环境变量 + CMakePresets.json。一次配好,所有项目通用。Windows 端只配 Boost + OpenCV,不配 Qt(Qt 开发放在 Linux 端)。

文中 <OpenCV安装目录>、<Boost根目录>、<项目根目录> 为占位符,替换成本机实际目录即可。

一、环境变量(系统变量)

在 Windows「系统属性 → 环境变量」里,系统变量新建:

变量名值作用
OpenCV_DIR<OpenCV安装目录>\build\x64\vc16\libOpenCV 的 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。

三、CMakePresets.json(可选,但推荐)

项目根目录建 CMakePresets.json:

{
  "version": 3,
  "configurePresets": [
    {
      "name": "debug",
      "generator": "Ninja",
      "binaryDir": "${sourceDir}/out/build/${presetName}",
      "cacheVariables": {
        "CMAKE_BUILD_TYPE": "Debug",
        "OpenCV_DIR": "$env{OpenCV_DIR}",
        "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"
      }
    }
  ]
}

这样 CMakeLists.txt 里不用写路径,preset 引用环境变量。

版本待核实:CMakePresets.json 的 "version": 3 对应较新的预设架构(需本机 CMake 版本支持),与模板工程里 cmake_minimum_required(VERSION 3.20) 的关系,首次配置前请确认 VS2022 自带 CMake 的实际版本满足要求。

四、CMakeLists.txt 模板

cmake_minimum_required(VERSION 3.20)
project(MyApp LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# ---------- Boost ----------
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)

# ---------- OpenCV ----------
find_package(OpenCV REQUIRED)

# ---------- 源文件 ----------
set(SOURCES
    src/main.cpp
    src/core/Service.cpp
    src/core/Service.h
    src/vision/ImageProcessor.cpp
    src/vision/ImageProcessor.h
)

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
    Boost::filesystem
    Boost::system
    Boost::thread
    ${OpenCV_LIBS}
)

五、配置总结

库环境变量指向为什么
OpenCVOpenCV_DIR<OpenCV安装目录>\build\x64\vc16\libOpenCVConfig.cmake 所在
BoostBOOST_ROOT<Boost根目录>Boost 根,CMake 找头文件和 .lib
运行时PATH 追加OpenCV 的 bin找 dll

六、从零配置步骤

1. 设环境变量

系统变量加 OpenCV_DIR、BOOST_ROOT。PATH 追加 OpenCV 的 bin。

2. 重启终端和 IDE

环境变量改完,必须重开 VS2022、CLion、CMD、PowerShell。

3. 验证

echo %OpenCV_DIR%
echo %BOOST_ROOT%

两个都有输出,就配好了。

4. 项目里用

CMakeLists.txt 写 find_package,CMakePresets.json 引用环境变量。不写死路径。

5. 构建

VS2022 或 CLion 打开项目,CMake 自动配置。

七、Linux 端(Qt)不需要环境变量

Qt 用 apt 装(qtbase5-dev qtcreator),在标准路径(/usr/lib/x86_64-linux-gnu/cmake/Qt5),CMake 自动找到,不用设任何环境变量。CMake 里直接:

find_package(Qt5 REQUIRED COMPONENTS Core Widgets Gui)

八、一句话总结

OpenCV 指 OpenCV_DIR(Config.cmake 所在),Boost 指 BOOST_ROOT(根),运行时 dll 靠 PATH;Linux 端 Qt 用 apt 装,不设环境变量。 配一次,所有项目通用;CMakeLists.txt 只写 find_package,不写路径。