Cmake не находит Boost


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

9 64

9 ответов:

вы уверены, что делаете это правильно? Идея заключается в том, что 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, где искать boost следующим образом:

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

существует больше помощи, доступной при чтении FindBoost.сам файл cmake. Он находится в вашем каталоге "модули".

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

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

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

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

удачи.

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

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

Я также имел аналогичную проблему и обнаружил, что переменные BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR и BOOST_ROOT env должны содержать абсолютное пути. ХТ!

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

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

пример:

cmake -DBOOST_ROOT=/opt/latestboost

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

для cmake версии 3.1.0-rc2 подобрать boost 1.57 указать-D_boost_TEST_VERSIONS=1.57

cmake версии 3.1.0 - RC2 по умолчанию для повышения

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

еще один совет для тех, кто пытается построить CGAL в частности, со статически связанным повышением. Это не достаточно, чтобы определить Boost_USE_STATIC_LIBS; Он переопределяется к тому времени Boost_DEBUG выводит его значение. Здесь нужно установить флажок "Дополнительно" и включить CGAL_Boost_USE_STATIC_LIBS.

у меня была такая же проблема при попытке запустить 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

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