Cmake не находит Boost
Я пытаюсь настроить проект с помощью CMake, но он не может найти библиотеки Boost, даже если они находятся в указанной папке. Я указал Boost_INCLUDE_DIR, Boost_LIBRARYDIR и BOOST_ROOT, но я все еще получаю сообщение об ошибке, говорящее, что CMake не может найти Boost. В чем может быть причина такой ошибки?
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
также было установлено. Как это бывает, cmakeFindBoost.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
и решил проблему.