Подтвердить что ты не робот

CMake находит Boost, но импортированные цели недоступны для версии Boost

Я использую CMake для поиска Boost. Boost найден, но ошибки CMake с помощью

Импортированные цели недоступны для версии Boost

См. полную ошибку (из macOS) ниже. Что я делаю неправильно?

CMake Warning at /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:743 (message):
  Imported targets not available for Boost version 106300
Call Stack (most recent call first):
  /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:842 (_Boost_COMPONENT_DEPENDENCIES)
/Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:1395 (_Boost_MISSING_DEPENDENCIES)
CMakeLists.txt:6 (find_package)

Boost version: 1.63.0
Found the following Boost libraries:
  thread
CMake Warning at /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:743 (message):
  Imported targets not available for Boost version 106300
Call Stack (most recent call first):
  /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:842 (_Boost_COMPONENT_DEPENDENCIES)
  /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:1395 (_Boost_MISSING_DEPENDENCIES)
  CMakeLists.txt:7 (find_package)
4b9b3361

Ответ 1

Ваша версия CMake слишком старая. Обновите CMake, и он будет работать.

CMake не может обнаружить зависимости между различными библиотеками Boost. Они явно реализованы в FindBoost.
Для каждого выпуска Boost эта информация добавляется сопровождающими CMake и становится частью следующего выпуска CMake. Поэтому вы должны убедиться, что ваша версия CMake была выпущена после Boost-версии, которую вы пытаетесь найти.

Для повышения 1.63 требуется CMake 3.7 или новее.
Для повышения 1.64 требуется CMake 3.8 или новее.
Для повышения 1.65 и 1.65.1 требуется CMake 3.9.3 или новее.
Для повышения версии 1.66 требуется CMake 3.11 или новее.
Boost 1.67 требует CMake 3.12 или новее.
Для повышения 1.68, 1.69 требуется CMake 3.13 или новее.
Для повышения 1.70 требуется CMake 3.14 или новее.

Без FindBoost

Начиная с версии 1.70, Boost предоставляет BoostConfig.cmake, который устарел FindBoost и необходимые изменения. Использование

find_package(Boost CONFIG)

исключает файл FindBoost и ищет только файл конфигурации. Хотя есть и несколько способов удалить FindBoost из CMake, но, поскольку это нарушило бы поддержку версий до 1.70, CMake ожидает выполнения этого шага. Тем не менее, это способ избавиться от этой путаницы в будущих версиях CMake.

Ответ 2

Я просто хотел опубликовать следующую работу, поскольку это намного проще, чем обновление CMake в системах, над которыми я работаю, где у меня нет доступа root/sudo. Установите BOOST_INCLUDEDIR и BOOST_LIBRARYDIR непосредственно при вызове CMake.

cmake  -DBOOST_INCLUDEDIR=... -DBOOST_LIBRARYDIR=... ...

Это может не работать, если Boost изменил зависимости между списком, жестко закодированным в модуле, который поставляется с CMake и версией boost, которую вы используете. Вам понадобится 30 секунд, чтобы попытаться через 30 минут установить cmake из источника.

Ответ 3

То же самое и здесь: проблема все еще есть, хотя я использую CMake 3.14.5 и boost 1.70.