从零配置的一套通用方案:环境变量 + 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。
三、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}
)
五、配置总结
| 库 | 环境变量 | 指向 | 为什么 |
|---|---|---|---|
| OpenCV | OpenCV_DIR | <OpenCV安装目录>\build\x64\vc16\lib | OpenCVConfig.cmake 所在 |
| Boost | BOOST_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,不写路径。
豫公网安备41108202000982号