使用CMake 3.17.5构建第三方应用时无法找到Boost Python问题求助
问题根因
CMake 3.17 内置的FindBoost.cmake模块默认会搜索不带版本后缀的boost_python库名,但vcpkg安装的boost-python组件会根据你本地安装的Python版本给库加后缀,比如对应Python 3.8的库名为boost_python38.lib,两者不匹配就会出现找到Boost主库但找不到python组件的报错。另外你单独设置Boost_INCLUDE_DIR而不配套设置库路径、架构匹配参数的话,也会导致组件搜索失效。
解决步骤
- 首先确认你安装boost-python时的vcpkg目标架构和你当前CMake编译的目标架构完全一致:
比如你vcpkg装的是x64-windows版本的boost,那CMake GUI里的Optional platform for generator必须选x64,不能用默认的Win32。每次改架构需要清空缓存重新配置,不要在原有缓存上修改。 - 不要手动设置
Boost_INCLUDE_DIR,完全通过vcpkg工具链配置Boost路径:
首次打开CMake GUI选择源码和构建目录后,点「Configure」之前,先点击「Add Entry」添加字符串类型的CMAKE_TOOLCHAIN_FILE,值为你本地vcpkg根目录下的scripts/buildsystems/vcpkg.cmake。同时添加字符串类型的VCPKG_TARGET_TRIPLET,值为你安装boost时用的triplet,比如x64-windows。 - 强制指定Boost的Python版本后缀:
如果上面两步做完还是报错,继续添加两个CMake缓存变量:- 字符串类型的
Boost_ARCHITECTURE,值设为-x64(如果你是x64架构,32位则设为-x86) - 字符串类型的
Boost_PYTHON_VERSION,值设为你本地安装的Python主版本+次版本号,比如你装的是Python 3.9就先试3.9,如果无效再试去掉小数点的39。
- 字符串类型的
- 适配第三方查找模块:如果项目使用的
FindUSDMonolithic.cmake模块强制写死了boost-python的查找逻辑,你可以临时修改该文件第71行附近的find_package逻辑,改成:
前提是你项目里已经先通过set(Boost_FIND_COMPONENTS python${Python3_VERSION_MAJOR}${Python3_VERSION_MINOR}) find_package(Boost 1.75 REQUIRED COMPONENTS ${Boost_FIND_COMPONENTS})find_package(Python3 REQUIRED)找到了Python版本。
内容的提问来源于stack exchange,提问作者Dmitrii Motorygin
相关产品推荐
相关产品推荐

