基于Conan中心Boost库构建vsomeIP时无法找到Boost的问题
背景信息
我正按照指定wiki文档构建vsomeIP,因项目依赖Boost库,在项目目录下创建了conanfile.txt,内容如下:
[requires] boost/1.83.0 [options] boost/*:without_stacktrace=True #disable this dependency to continue the build [generators] CMakeDeps CMakeToolchain
已在项目同目录的build目录完成依赖安装,当前项目目录结构:
- build - capicxx-someip-runtime - vsomeip - conanfile.txt
进入vsomeip目录后执行以下CMake命令:
cmake -Bbuild -DCMAKE_INSTALL_PREFIX=../install_folder -DCMAKE_TOOLCHAIN_FILE="../build" -DENABLE_SIGNAL_HANDLING=1 -DDIAGNOSIS_ADDRESS=0x10 .
出现无法找到Boost的错误,报错信息:
CMake Warning: Ignoring extra path from command line:
"../install_folder"
CMake Warning (dev) at CMakeLists.txt:191 (find_package): Policy
CMP0167 is not set: The FindBoost module is removed. Run "cmake
--help-policy CMP0167" for policy details. Use the cmake_policy command to set the policy and suppress this warning.This warning is for project developers. Use -Wno-dev to suppress it.
CMake Error at
C:/Tools/winlibs-x86_64-posix-seh-gcc-14.2.0-llvm-19.1.7-mingw-w64ucrt-12.0.0-r3/mingw64/share/cmake-3.31/Modules/FindPackageHandleStandardArgs.cmake:233
(message): Could NOT find Boost (missing: Boost_INCLUDE_DIR system
thread filesystem) (Required is at least version "1.66") Call Stack
(most recent call first):
C:/Tools/winlibs-x86_64-posix-seh-gcc-14.2.0-llvm-19.1.7-mingw-w64ucrt-12.0.0-r3/mingw64/share/cmake-3.31/Modules/FindPackageHandleStandardArgs.cmake:603
(_FPHSA_FAILURE_MESSAGE)
C:/Tools/winlibs-x86_64-posix-seh-gcc-14.2.0-llvm-19.1.7-mingw-w64ucrt-12.0.0-r3/mingw64/share/cmake-3.31/Modules/FindBoost.cmake:2423
(find_package_handle_standard_args) CMakeLists.txt:191
(find_package)-- Configuring incomplete, errors occurred!
原因分析
1. CMake命令参数错误
- 参数换行导致参数失效:原命令中
-DCMAKE_INSTALL_PREFIX=../install_folder后换行,CMake将后续参数识别为新输入,导致../install_folder被当作多余路径忽略,同时影响CMAKE_TOOLCHAIN_FILE的配置有效性。 - Toolchain文件路径错误:
-DCMAKE_TOOLCHAIN_FILE="../build"仅指定了目录,未指向Conan生成的具体工具链文件conan_toolchain.cmake,CMake无法加载Conan提供的依赖配置。
2. CMake策略CMP0167未配置
CMake 3.31版本已移除旧的FindBoost模块,默认使用新的Boost查找逻辑,但vsomeIP的CMakeLists未设置CMP0167策略,导致CMake仍尝试使用已移除的模块查找Boost,无法识别Conan安装的Boost。
3. Conan依赖配置未被正确加载
由于Toolchain文件路径错误,CMake未加载Conan生成的CMakeDeps配置,无法获取Boost的安装路径、库文件等信息,只能通过系统默认方式查找,最终找不到对应依赖。
解决步骤
- 修正CMake命令:确保参数格式正确,指定完整的toolchain文件路径:
cmake -Bbuild -DCMAKE_INSTALL_PREFIX=../install_folder -DCMAKE_TOOLCHAIN_FILE="../build/conan_toolchain.cmake" -DENABLE_SIGNAL_HANDLING=1 -DDIAGNOSIS_ADDRESS=0x10 . - 确认Conan依赖安装完成:进入项目根目录的
build文件夹,重新执行Conan安装命令(确保依赖配置被正确生成):cd build conan install .. --build=missing - 配置CMake策略(可选):若vsomeIP的CMakeLists仍报错,可在
find_package(Boost)前添加策略设置:cmake_policy(SET CMP0167 NEW)
内容的提问来源于stack exchange,提问作者mr.Arrow

