2017-02-08 11 views
25

Я использую CMake для поиска Boost. Повышение будет найдено, но CMake ошибка вне сCMake находит Boost, но импортированные цели недоступны для Boost версии

ввезенных целями, не доступными для 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) 
+4

Вам нужен CMake 3.7 для последнего Boost. – usr1234567

+0

@ usr1234567 Обновление до 'cmake 3.8' решило проблему. Если вы опубликуете это как ответ, я приму его. – Sounak

+1

Я отредактировал ваш вопрос, так как этот вопрос задается для каждого выпуска Boost. Возможно, больше людей найдут ваш вопрос таким образом. – usr1234567

ответ

52

Ваша версия 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 или более поздней версии.

+3

Большое спасибо. CLI 2016.3 в комплекте с CMake 3.6.3 сбой этой команды. Теперь я использую систему CMake 3.7.2 из '/ usr/bin/cmake' – kyb

+1

Иногда вам может повезти. Я получил предупреждения «импортированные цели недоступны», но мог бы создать мой проект (CMake 3.6.2, Boost 1.64.0). Я подозреваю, потому что зависимости не изменились для библиотек, которые я использую (файловая система, система, python, unit_test_framework) с 1,62, которая является самой высокой версией Boost, о которой знает CMake 3.6. –

+4

У меня есть boost 1.64 и cmake 3.8 и все еще получаю сообщение –

1

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

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

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

+2

Хорошо, что это сработало. Но это не общее решение. Если новые библиотеки были добавлены или существующие были сброшены, это не сработает. – usr1234567