CMake无法找到Boost配置文件的问题求助
问题:CMake无法找到Boost配置文件(Boost 1.87.0 + Windows)
Boost安装路径:C:\Program Files\boost\boost_1_87_0,使用CMake构建OSLab2项目时无法定位Boost配置文件,已尝试以下操作但均无效:
- 按错误提示指定路径(
C:\Program Files\boost\boost_1_87_0\tools\boost_install和C:\Program Files\boost\boost_1_87_0\tools\cmake\config),但路径下无所需文件(已用Everything工具确认) - 设置
BOOST_ROOT环境变量,无效果 - 设置
Boost_DIR环境变量,无效果
当前CMakeLists.txt代码
cmake_minimum_required (VERSION 4.0) if (POLICY CMP0141) cmake_policy(SET CMP0141 NEW) set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>") endif() project ("OSLab2") add_subdirectory(src/main) set(CXX_STANDARD 98) # set(BOOST_ROOT "C:\\Program Files\\boost\\boost_1_87_0\\tools\\boost_install") set(Boost_DEBUG ON) # set(Boost_DIR "C:\\Program\ Files\\boost\\boost_1_87_0") # set(Boost_DIR "C:\\Program Files\\boost\\boost_1_87_0\\tools\\cmake\\config") # set(Boost_DIR "C:\\Program Files\\boost\\boost_1_87_0\\tools\\boost_install") find_package(Boost REQUIRED COMPONENTS lambda) include_directories(${Boost_INCLUDE_DIRS}) # sets install default path to current repository set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}") set(BIN_PATH bin) install(TARGETS DESTINATION ${BIN_PATH}) # P.S. install dir do not work
控制台错误输出
[main] Configuring project: OSLab2 [proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe -DCMAKE_INSTALL_PREFIX=C:/Users/Ilya/work/OS/OSLab2/bin -SC:/Users/Ilya/work/OS/OSLab2 -BC:/Users/Ilya/work/OS/OSLab2/build -G Ninja [cmake] -- The C compiler identification is MSVC 19.43.34808.0 [cmake] -- The CXX compiler identification is MSVC 19.43.34808.0 [cmake] -- Detecting C compiler ABI info [cmake] -- Detecting C compiler ABI info - done [cmake] -- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.43.34808/bin/Hostx64/x64/cl.exe - skipped [cmake] -- Detecting C compile features [cmake] -- Detecting C compile features - done [cmake] -- Detecting CXX compiler ABI info [cmake] -- Detecting CXX compiler ABI info - done [cmake] -- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.43.34808/bin/Hostx64/x64/cl.exe - skipped [cmake] -- Detecting CXX compile features [cmake] -- Detecting CXX compile features - done [cmake] CMake Error at CMakeLists.txt:27 (find_package): [cmake] By not providing "FindBoost.cmake" in CMAKE_MODULE_PATH this project has [cmake] asked CMake to find a package configuration file provided by "Boost", but [cmake] CMake did not find one. [cmake] [cmake] Could not find a package configuration file provided by "Boost" with any of [cmake] the following names: [cmake] [cmake] BoostConfig.cmake [cmake] boost-config.cmake [cmake] [cmake] Add the installation prefix of "Boost" to CMAKE_PREFIX_PATH or set [cmake] "Boost_DIR" to a directory containing one of the above files. If "Boost" [cmake] provides a separate development package or SDK, be sure it has been [cmake] installed. [cmake] [cmake] [cmake] -- Configuring incomplete, errors occurred! [proc] The command: "C:\Program Files\CMake\bin\cmake.EXE" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe -DCMAKE_INSTALL_PREFIX=C:/Users/Ilya/work/OS/OSLab2/bin -SC:/Users/Ilya/work/OS/OSLab2 -BC:/Users/Ilya/work/OS/OSLab2/build -G Ninja exited with code: 1
解决方案
1. 编译Boost生成CMake配置文件
Boost官网下载的1.87.0默认是源码包,未预编译生成CMake所需的BoostConfig.cmake文件,需手动编译:
- 打开VS2022 x64开发者命令提示符
- 切换到Boost根目录:
cd "C:\Program Files\boost\boost_1_87_0" - 执行bootstrap脚本生成构建工具:
bootstrap.bat - 编译并安装Boost到指定目录:
b2 install --prefix="C:\Program Files\boost\boost_1_87_0_installed" toolset=msvc-14.4--prefix可自定义安装路径toolset=msvc-14.4对应VS2022编译器版本,需匹配你的实际环境
2. 修正CMakeLists.txt配置
编译完成后,修改CMakeLists.txt如下:
cmake_minimum_required (VERSION 4.0) if (POLICY CMP0141) cmake_policy(SET CMP0141 NEW) set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>") endif() project ("OSLab2") add_subdirectory(src/main) set(CMAKE_CXX_STANDARD 98) # 修复原代码变量名错误 # 指定编译后的Boost安装路径 set(BOOST_ROOT "C:\Program Files\boost\boost_1_87_0_installed") set(Boost_DEBUG ON) # lambda是header-only库,无需指定COMPONENTS find_package(Boost REQUIRED) include_directories(${Boost_INCLUDE_DIRS}) # sets install default path to current repository set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}") set(BIN_PATH bin) install(TARGETS DESTINATION ${BIN_PATH})
关键修正点:
- 原代码
set(CXX_STANDARD 98)错误,应改为CMAKE_CXX_STANDARD lambda是仅头文件库,无需在find_package中指定COMPONENTS,否则CMake会寻找不存在的编译库文件
3. 重新配置CMake
- 删除项目下的
build目录 - 重启VS Code,重新执行CMake配置流程
替代方案:使用预编译Boost二进制包
若不想手动编译,可直接下载对应VS2022的Boost预编译二进制包,安装后Boost_DIR指向安装目录下的lib/cmake/Boost-1.87.0路径(该目录下存在BoostConfig.cmake),再执行CMake配置即可。
内容的提问来源于stack exchange,提问作者Plutonictoast1
相关产品推荐
相关产品推荐

