让 cmake 的 find_package(Boost ...) 在 conda 环境中查找标头



我正在尝试通过cmake在Linux上构建一个取决于增强的项目。该项目的cmakelists.txt包含以下行:

find_package(Boost 1.46 REQUIRED COMPONENTS system thread filesystem)

出于可重复性的原因,我已经通过conda install libboost安装了所需的提升标头,以便它们位于 ~/anaconda3/envs/.../include/boost而不是/usr/local/include。不是在运行cmake时,我会收到以下路线的错误:

CMake Warning at /usr/share/cmake-3.7/Modules/FindBoost.cmake:761 (message):
  Imported targets not available for Boost version
Call Stack (most recent call first):
  /usr/share/cmake-3.7/Modules/FindBoost.cmake:865 (_Boost_COMPONENT_DEPENDENCIES)
  /usr/share/cmake-3.7/Modules/FindBoost.cmake:1470 (_Boost_MISSING_DEPENDENCIES)
  cmake/Dependencies.cmake:5 (find_package)
  CMakeLists.txt:43 (include)

我该怎么做才能让Cmake找到我的增压标头?

这对我有用:

cmake .. -DCMAKE_PREFIX_PATH=$CONDA_PREFIX

这起作用是因为Cmake在寻找库包时有一个定义明确的搜索顺序。cmake_prefix_path告诉cmake在用户指定的目录中搜索。$ CONDA_PREFIX是Anaconda激活环境时设置的环境变量。这两个工具旨在以这种方式一起工作。

要给cmake一个提示,在系统上安装了增强功能,则必须相应地设置BOOST_ROOT变量。在您的示例中,这似乎是

BOOST_ROOT=~/anaconda3/envs/.../

请注意,您必须指定libinclude文件夹的父目录。文件树看起来如下:

BOOST_ROOT/
|-- include/
|   |-- boost/
|   |   |-- *.hpp
|   |   `-- ...
|   `-- ...
`-- lib/
    |-- libboost_*.so
    `-- ...

另一个注意事项:您只是在写有关标题的文章,但请记住,您要使用的三个组件不是不是 header-,而是您的程序必须链接的实际库。

最新更新