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

Cmake не находит Boost

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

4b9b3361

Ответ 1

Вы уверены, что делаете все правильно? Идея состоит в том, что 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.

Ответ 2

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

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

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

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

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

Удачи.

Ответ 3

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

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

Ответ 4

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

.Пример:

cmake -DBOOST_ROOT=/opt/latestboost

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

cmake версии 3.1.0-rc2 по умолчанию для повышения <= 1.56.0, как видно, используя -DBoost_DEBUG = ON

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

apt установить libboost-all-dev

Я нашел это здесь: