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

Pet*_*ter 6 boost cmake anaconda

我正在尝试通过 CMake 在 Linux 上构建一个依赖于 Boost 的项目。该项目的 CMakeLists.txt 包含以下行:

find_package(Boost 1.46 REQUIRED COMPONENTS system thread filesystem)
Run Code Online (Sandbox Code Playgroud)

出于可重复性的原因,我已经通过安装了所需的 Boost 标头,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)
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能让 CMake 找到我的 Boost 标头?

Sta*_* F. 3

为了给 CMake 提示,你的系统上安装了 Boost,你必须BOOST_ROOT相应地设置变量。在你的例子中,这似乎是

BOOST_ROOT=~/anaconda3/envs/.../
Run Code Online (Sandbox Code Playgroud)

请注意,您必须指定libinclude文件夹的父目录。文件树应如下所示:

BOOST_ROOT/
|-- include/
|   |-- boost/
|   |   |-- *.hpp
|   |   `-- ...
|   `-- ...
`-- lib/
    |-- libboost_*.so
    `-- ...
Run Code Online (Sandbox Code Playgroud)

另请注意:您仅编写有关标头的内容,但请记住,您要使用的这三个组件不是标头的,而是您的程序必须链接的实际库。