Cmake не находит Boost - PullRequest
       18

Cmake не находит Boost

69 голосов
/ 28 сентября 2010

Я пытаюсь настроить проект с использованием CMake, но он не может найти библиотеки Boost, даже если они находятся в указанной папке.Я указал Boost_INCLUDE_DIR, Boost_LIBRARYDIR и BOOST_ROOT, но я все еще получаю сообщение о том, что CMake не может найти Boost.В чем может быть причина такой ошибки?

Ответы [ 9 ]

89 голосов
/ 28 сентября 2010

Вы уверены, что делаете все правильно? Идея состоит в том, что CMake устанавливает BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR и BOOST_ROOT автоматически. Сделайте что-нибудь подобное в CMakeLists.txt:

FIND_PACKAGE(Boost)
IF (Boost_FOUND)
    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
    ADD_DEFINITIONS( "-DHAS_BOOST" )
ENDIF()

если boost не установлен в месте по умолчанию и, следовательно, не может быть найден cmake, вы можете указать cmake, где искать повышение, как это:

SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/win32libs/boost")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/win32libs/boost/lib")

конечно, эти две строки должны быть до FIND_PACKAGE (Boost) в CMakeLists.txt

42 голосов
/ 07 января 2012

Дополнительную справку можно получить, прочитав сам файл FindBoost.cmake.Он находится в вашем каталоге «Модули».

Хорошее начало - установить (Boost_DEBUG 1) - это даст много информации о том, где находится повышение, что он ищет, и может помочь объяснить, почему он не может его найти.

Это также может помочь вам определить, правильно ли он подхватывает ваш BOOST_ROOT.

FindBoost.cmake также иногда имеет проблемы, если точная версия boost не указана в переменных Available Versions.Вы можете узнать больше об этом, прочитав FindBoost.cmake

Наконец, FindBoost.cmake имел некоторые ошибки в прошлом.Одна вещь, которую вы можете попробовать, это взять новую версию FindBoost.cmake из последней версии cmake и вставить ее в папку вашего проекта рядом с CMakeLists.txt - тогда, даже если у вас есть старая версия boost, она будет использоватьновая версия FindBoost.cmake, которая находится в папке вашего проекта.

Удачи.

8 голосов
/ 05 января 2016

Я боролся с этой проблемой некоторое время сам.Оказалось, что cmake искал файлы библиотеки Boost, используя соглашение об именовании Boost, в котором имя библиотеки является функцией версии компилятора, использованной для его создания.Наши библиотеки Boost были построены с использованием GCC 4.9.1, и эта версия компилятора фактически присутствовала в нашей системе;однако GCC 4.4.7 также было установлено.Как оказалось, сценарий FindBoost.cmake в cmake автоматически определял установку GCC 4.4.7 вместо GCC 4.9.1 и, таким образом, искал файлы библиотеки Boost с "gcc44" в именах файлов, а не "* 1008".* ".

Простым решением было заставить cmake предполагать, что GCC 4.9 присутствует, установив Boost_COMPILER в" -gcc49CMakeLists.txt.С этим изменением FindBoost.cmake искал и нашел мои файлы библиотеки Boost.

5 голосов
/ 15 февраля 2017

Вы также можете указать версию Boost, которую вы хотели бы использовать в CMake, передав -DBOOST_INCLUDEDIR или -DBOOST_ROOT, указывая на расположение правильных заголовков повышения версии

Пример:

cmake -DBOOST_ROOT=/opt/latestboost

Это также будет полезно, когда несколько буст-версий находятся в одной системе.

3 голосов
/ 27 июня 2013

У меня также была похожая проблема, и я обнаружил, что переменные BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR и BOOST_ROOT должны содержать абсолютные пути.НТН!

2 голосов
/ 18 декабря 2012

Если вы создаете свой собственный буст, не забудьте использовать --layout = versioned, иначе поиск конкретной версии библиотеки не удастся

1 голос
/ 28 декабря 2017

У меня была такая же проблема при попытке запустить make для проекта после установки Boost версии 1.66.0 на Ubuntu Trusty64. Сообщение об ошибке было похоже (не совсем так) на это:

CMake Error at     
/usr/local/Cellar/cmake/3.3.2/share/cmake/Modules/FindBoost.cmake:1245 (message):
Unable to find the requested Boost libraries.
Boost version: 0.0.0
Boost include path: /usr/include
Detected version of Boost is too old.  Requested version was 1.36 (or newer).
Call Stack (most recent call first):
CMakeLists.txt:10 (FIND_PACKAGE)

Boost определенно установлен, но CMake не может его обнаружить. Потратив много времени на обработку путей и переменных среды, я в итоге проверил cmake на наличие вариантов и обнаружил следующее:

--check-system-vars        = Find problems with variable usage in system files

Итак, я запустил следующее в каталоге:

sudo cmake --check-system-vars

который вернул:

Also check system files when warning about unused and uninitialized variables.
-- Boost version: 1.66.0
-- Found the following Boost libraries:
--   system
--   filesystem
--   thread
--   date_time
--   chrono
--   regex
--   serialization
--   program_options
-- Found Git: /usr/bin/git
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/myproject

и решил проблему.

1 голос
/ 28 ноября 2014

Для версии cmake 3.1.0-rc2, чтобы получить повышение 1.57, укажите -D_boost_TEST_VERSIONS = 1.57

cmake версии 3.1.0-rc2 по умолчанию использует boost <= 1.56.0, как видно с использованием -DBoost_DEBUG = ON </p>

cmake -D_boost_TEST_VERSIONS = 1.57 -DBoost_DEBUG = ON -DCMAKE_BUILD_TYPE = Debug -DCMAKE_C_COMPILER = clang -DCMAKE_CXX_COMPILER = clang ++

0 голосов
/ 14 ноября 2012

Еще один совет для тех, кто пытается построить CGAL в частности, со статически связанным Boost.Недостаточно определить Boost_USE_STATIC_LIBS;он переопределяется к тому моменту, когда Boost_DEBUG выводит свое значение.Здесь нужно установить флажок «Дополнительно» и включить CGAL_Boost_USE_STATIC_LIBS.

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