我正在尝试使用 CMake 针对 conda 环境构建一些项目( crocoddyl )。构建命令是:
cmake -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX ${CMAKE_ARGS} -S . -B build
我有所有必要的依赖项,即 pinocchio、libboost-python-devel、eignepy。 CMake 成功找到 eignepy,这很好,但是,当 eigenpy 检查 boost-python 依赖项时,一切都会崩溃并出现错误:
CMake Error at /home/m8/micromamba/envs/sber-croc/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
Could NOT find Boost (missing: python310) (found version "1.85.0")
Call Stack (most recent call first):
/home/m8/micromamba/envs/sber-croc/share/cmake-3.29/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)
/home/m8/micromamba/envs/sber-croc/share/cmake-3.29/Modules/FindBoost.cmake:2393 (find_package_handle_standard_args)
/home/m8/micromamba/envs/sber-croc/lib/cmake/eigenpy/boost.cmake:144 (find_package)
/home/m8/micromamba/envs/sber-croc/lib/cmake/eigenpy/eigenpyConfig.cmake:149 (SEARCH_FOR_BOOST_PYTHON)
cmake/package-config.cmake:110 (find_package)
CMakeLists.txt:90 (add_project_dependency)
我肯定知道,其中$CONDA_PREFIX/lib
包含libboost_python310.so
和libboost_python310.so.1.84.0
。但是我的主机系统没有 python 绑定,只有 1.85.0 版本的 boost。所以我认为在 CMake 期间,eigenpy 的 find_package 会混淆前缀并查找错误的 lib 目录。
如何忽略系统库或正确指定前缀?
export CMAKE_PREFIX_PATH=$CONDA_PREFIX
我也尝试过,但-DCMAKE_PREFIX_PATH=$CONDA_PREFIX
没有运气。导出LD_LIBRARY_PATH
也没有效果。 CMake、编译器、pkg-config,一切都安装在 conda 环境中。
对于任何可能面临此问题的人。答案是boost有自己的FindBoost。指定
Boost_DEBUG
调试问题可能很有用。还可以考虑使用BOOST_INCLUDEDIR
和BOOST_LIBRARYDIR
,他们为我解决了问题并帮助避免了系统安装。此链接特别有用:https://discourse.cmake.org/t/findboost-ignores-all-hints-and-wont-find-the-right-installation/3883