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

2ul0zpep  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(168)

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

find_package(Boost 1.46 REQUIRED COMPONENTS system thread filesystem)

出于可重复性的原因,我通过conda install libboost安装了所需的Boost头,因此它们位于~/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找到我的Boost标头?

tjvv9vkg

tjvv9vkg1#

为了给予CMake一个提示,在你的系统上安装了Boost,你必须相应地设置BOOST_ROOT变量。

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

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

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

另一个注意事项:你只写了头文件,但是要记住你要使用的三个组件 * 不 * 只是头文件,而是你的程序必须链接的实际库。

brc7rcf0

brc7rcf02#

这对我很有效:

cmake .. -DCMAKE_PREFIX_PATH=$CONDA_PREFIX

这是因为CMake有一个明确定义的搜索顺序,它在查找库包时会遵循这个顺序。CMAKE_PREFIX_PATH告诉CMake在用户指定的目录中搜索。$CONDA_PREFIX是一个环境变量,当你激活你的环境时由Anaconda设置。这两个工具被设计成以这种方式一起工作。

相关问题