Заставьте cmake find_package (Boost ...) найти заголовки в среде conda - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь построить проект на Linux через CMake, который зависит от Boost. CMakeLists.txt проекта содержит следующую строку:

find_package(Boost 1.46 REQUIRED COMPONENTS system thread filesystem)

В целях воспроизводимости я установил требуемые заголовки 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)

Что я могу сделать, чтобы CMake нашел мои заголовки Boost?

1 Ответ

1 голос
/ 02 мая 2019

Чтобы дать подсказку CMake, когда Boost установлен в вашей системе, вы должны соответственно установить переменную BOOST_ROOT. В вашем примере это похоже на

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

Обратите внимание, что вы должны указать родительский каталог для папок lib и include. Дерево файлов должно выглядеть следующим образом:

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

Еще одно примечание: вы пишете только о заголовках, но имейте в виду, что эти три компонента, которые вы хотите использовать, , а не только для заголовков , но являются реальными библиотеками, которые ваша программа должен быть связан с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...