FindBoost
Нахождение директорий заголовочных файлов и библиотек Boost
Используйте этот модуль, вызвав find_package() в формате:
find_package(Boost
[version] [EXACT] # Minimum or EXACT version e.g. 1.67.0
[REQUIRED] # Fail with error if Boost is not found
[COMPONENTS <libs>...] # Boost libraries by their canonical name
# e.g. "date_time" for "libboost_date_time"
[OPTIONAL_COMPONENTS <libs>...]
# Optional Boost libraries by their canonical name)
) # e.g. "date_time" for "libboost_date_time"
Этот модуль находит заголовочные файлы и запрошенные компоненты библиотек ИЛИ файл конфигурации пакета CMake, предоставляемый сборкой "Boost CMake". В последнем случае переходите к разделу Boost CMake ниже.
Введено в версии 3.7: bzip2 и zlib компоненты (только Windows).
Введено в версии 3.11: Опция OPTIONAL_COMPONENTS.
Введено в версии 3.13: stacktrace_* компоненты.
Введено в версии 3.19: bzip2 и zlib компоненты на всех платформах.
Переменные результатов
Этот модуль определяет следующие переменные:
-
Boost_FOUND -
Истина, если были найдены заголовочные файлы и запрошенные библиотеки.
-
Boost_INCLUDE_DIRS -
Директории заголовочных файлов Boost.
-
Boost_LIBRARY_DIRS -
Директории подключения для библиотек Boost.
-
Boost_LIBRARIES -
Компоненты библиотек Boost для подключения.
-
Boost_<COMPONENT>_FOUND -
Истина, если компонент
<COMPONENT>был найден (имя<COMPONENT>заглавными буквами). -
Boost_<COMPONENT>_LIBRARY -
Библиотеки для подключения для компонента
<COMPONENT>(может включатьtarget_link_libraries()ключевые слова debug/optimized). -
Boost_VERSION_MACRO -
Значение
BOOST_VERSIONизboost/version.hpp. -
Boost_VERSION_STRING -
Номер версии Boost в формате
X.Y.Z. -
Boost_VERSION -
Номер версии Boost в формате
X.Y.Z(такой же, какBoost_VERSION_STRING).Изменено в версии 3.15: В предыдущих версиях CMake эта переменная использовала исходную строку версии из заголовочного файла Boost (такой же, как
Boost_VERSION_MACRO). См. политикуCMP0093. -
Boost_LIB_VERSION -
Строка версии, добавляемая к именам файлов библиотек.
-
Boost_VERSION_MAJOR, Boost_MAJOR_VERSION -
Основной номер версии Boost (
XвX.Y.Z). -
Boost_VERSION_MINOR, Boost_MINOR_VERSION -
Дополнительный номер версии Boost (
YвX.Y.Z). -
Boost_VERSION_PATCH, Boost_SUBMINOR_VERSION -
Дополнительный номер подверсии Boost (
ZвX.Y.Z). -
Boost_VERSION_COUNT -
Количество компонентов версии (3).
-
Boost_LIB_DIAGNOSTIC_DEFINITIONS (Windows-specific) -
Передать в
add_definitions(), чтобы отобразить диагностическую информацию о автоматическом подключении Boost во время компиляции.
Введено в версии 3.15: Переменные Boost_VERSION_<PART>.
Переменные кэша
Результаты поиска сохраняются в записях кэша CMake:
-
Boost_INCLUDE_DIR -
Директория, содержащая заголовочные файлы Boost.
-
Boost_LIBRARY_DIR_RELEASE -
Директория, содержащая релизные библиотеки Boost.
-
Boost_LIBRARY_DIR_DEBUG -
Директория, содержащая отладочные библиотеки Boost.
-
Boost_<COMPONENT>_LIBRARY_DEBUG -
Компонент
<COMPONENT>отладочная версия библиотеки. -
Boost_<COMPONENT>_LIBRARY_RELEASE -
Компонент
<COMPONENT>релизная версия библиотеки.
Введено в версии 3.3: Переменные Boost_LIBRARY_DIR_RELEASE и Boost_LIBRARY_DIR_DEBUG для каждой конфигурации.
Подсказки
Этот модуль считывает подсказки об местах поиска из переменных:
-
BOOST_ROOT, BOOSTROOT -
Предпочтительный префикс установки.
-
BOOST_INCLUDEDIR -
Предпочтительная директория заголовочных файлов, например
<prefix>/include. -
BOOST_LIBRARYDIR -
Предпочтительная директория библиотек, например
<prefix>/lib. -
Boost_NO_SYSTEM_PATHS -
Установите в
ONдля отключения поиска в местах, не указанных этими переменными подсказок. По умолчаниюOFF. -
Boost_ADDITIONAL_VERSIONS -
Список версий Boost, неизвестных этому модулю. (Расположения установки Boost могут содержать версию).
Пользователи могут установить эти подсказки или результаты как CACHE записи. Проекты не должны читать эти записи напрямую, а вместо этого должны использовать вышеперечисленные переменные результатов. Обратите внимание, что некоторые имена подсказок начинаются с заглавной буквы BOOST. Их можно указать как переменные окружения, если они не указаны как переменные CMake или записи кэша.
Этот модуль сначала ищет заголовочные файлы Boost, используя вышеуказанные переменные подсказок (исключая BOOST_LIBRARYDIR), и сохраняет результат в Boost_INCLUDE_DIR.
Затем он ищет запрошенные библиотеки компонентов, используя указанные выше подсказки (исключая BOOST_INCLUDEDIR и Boost_ADDITIONAL_VERSIONS), директории "lib" около Boost_INCLUDE_DIR, и настройки конфигурации имен библиотек ниже.
Он сохраняет директории библиотек в Boost_LIBRARY_DIR_DEBUG и Boost_LIBRARY_DIR_RELEASE, а отдельные места расположения библиотек в Boost_<COMPONENT>_LIBRARY_DEBUG и Boost_<COMPONENT>_LIBRARY_RELEASE.
При изменении настроек, используемых предыдущими поисками в том же дереве сборки (за исключением переменных окружения), этот модуль отбрасывает результаты предыдущих поисков, затронутые изменениями, и ищет снова.
Импортированные цели
Нововведение в версии 3.5.
Этот модуль определяет следующие IMPORTED цели:
-
Boost::boost -
Цель для зависимостей только из заголовков. (Директория заголовков Boost).
-
Boost::headers -
Нововведение в версии 3.15: Псевдоним для
Boost::boost. -
Boost::<component> -
Цель для конкретной зависимости компонента (динамическая или статическая библиотека); имя
<component>строчными буквами. -
Boost::diagnostic_definitions -
Интерфейсная цель для включения диагностической информации об автоматическом подключении Boost во время компиляции (добавляет
-DBOOST_LIB_DIAGNOSTIC). -
Boost::disable_autolinking -
Интерфейсная цель для отключения автоматического подключения с MSVC (добавляет
-DBOOST_ALL_NO_LIB). -
Boost::dynamic_linking -
Интерфейсная цель для включения динамического подключения с MSVC (добавляет
-DBOOST_ALL_DYN_LINK).
Неявные зависимости, такие как Boost::filesystem требующие Boost::system, будут автоматически обнаружены и удовлетворены, даже если система не указана при использовании find_package() и если Boost::system не добавлено в target_link_libraries().
Если используется Boost::thread, то Threads::Threads также будет добавлено автоматически.
Важно отметить, что импортированные цели ведут себя иначе, чем переменные, созданные этим модулем: несколько вызовов find_package(Boost) в одной директории или поддиректориях с различными параметрами (например, статическая или динамическая) не переопределяют значения целей, созданных первым вызовом.
Другие переменные
Библиотеки Boost доступны во многих вариантах, закодированных в их имени файла.
Пользователи или проекты могут указать модулю, какой вариант искать, задав переменные:
-
Boost_USE_DEBUG_LIBS -
Новое в версии 3.10.
Установлено в
ONилиOFFдля указания, следует ли искать и использовать библиотеки отладки. По умолчаниюON. -
Boost_USE_RELEASE_LIBS -
Новое в версии 3.10.
Установлено в
ONилиOFFдля указания, следует ли искать и использовать релизные библиотеки. По умолчаниюON. -
Boost_USE_MULTITHREADED -
Установлено в OFF для использования не многопоточных библиотек ("mt" тег). По умолчанию
ON. -
Boost_USE_STATIC_LIBS -
Установлено в ON для принудительного использования статических библиотек. По умолчанию
OFF. -
Boost_USE_STATIC_RUNTIME -
Установлено в
ONилиOFFдля указания, следует ли использовать библиотеки, статически связанные с C++ runtime ("s" тег). По умолчанию зависит от платформы. -
Boost_USE_DEBUG_RUNTIME -
Установлено в
ONилиOFFдля указания, следует ли использовать библиотеки, связанные с MS отладочной C++ runtime ("g" тег). По умолчаниюON. -
Boost_USE_DEBUG_PYTHON -
Установлено в
ONдля использования библиотек, скомпилированных с отладочной сборкой Python ("y" тег). По умолчаниюOFF. -
Boost_USE_STLPORT -
Установлено в
ONдля использования библиотек, скомпилированных с STLPort ("p" тег). По умолчаниюOFF. -
Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS -
Установлено в ON для использования библиотек, скомпилированных с устаревшими "родными iostreams" STLPort ("n" тег). По умолчанию
OFF. -
Boost_COMPILER -
Установлено в суффикс библиотеки, специфичный для компилятора (например,
-gcc43). По умолчанию вычисляется автоматически для используемого C++ компилятора.Изменено в версии 3.9: Можно использовать список, если необходимо протестировать несколько совместимых суффиксов в порядке убывания приоритета.
-
Boost_LIB_PREFIX -
Новое в версии 3.18.
Установлено в префикс имени платформо-специфической библиотеки (например,
lib), используемый статическими Boost библиотеками. Это необходимо только на платформах, где CMake по умолчанию не знает префикс. -
Boost_ARCHITECTURE -
Новое в версии 3.13.
Установлено в суффикс архитектурно-специфической библиотеки (например,
-x64). По умолчанию вычисляется автоматически для используемого C++ компилятора. -
Boost_THREADAPI -
Суффикс для имени библиотеки компонента
thread, напримерpthreadилиwin32. Будут проверены имена с и без этого суффикса. -
Boost_NAMESPACE -
Альтернативное пространство имен, используемое для построения Boost, например, если установлено
myboost, будет осуществлен поискmyboost_threadвместоboost_thread.
Другие переменные, которые можно установить для управления этим модулем:
-
Boost_DEBUG -
Установлено в
ONдля включения отладочного вывода отFindBoost. Пожалуйста, включите это перед подачей отчета об ошибке. -
Boost_REALPATH -
Установлено в
ONдля разрешения символьных ссылок для обнаруженных библиотек, чтобы помочь в упаковке. Например, библиотека компонента "system" может быть разрешена в/usr/lib/libboost_system.so.1.67.0вместо/usr/lib/libboost_system.so. Это не влияет на компоновку и не должно включаться, если пользователь не нуждается в этой информации. -
Boost_LIBRARY_DIR -
Значение по умолчанию для
Boost_LIBRARY_DIR_RELEASEиBoost_LIBRARY_DIR_DEBUG. -
Boost_NO_WARN_NEW_VERSIONS -
Новое в версии 3.20.
Установлено в
ONдля подавления предупреждений об неизвестных зависимостях для новых версий Boost.
В Visual Studio и Borland компиляторах заголовки Boost запрашивают автоматическую привязку к соответствующим библиотекам. Это требует явной привязки или наличия соответствующих библиотек в пути поиска библиотек. В этом случае установка Boost_USE_STATIC_LIBS в OFF может не привести к динамической компоновке. Автоматическая компоновка Boost обычно запрашивает статические библиотеки за некоторыми исключениями (такими как Boost.Python). Используйте:
add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS})
чтобы попросить Boost сообщить информацию о запросах автоматической компоновки.
Примеры
Найти только заголовки Boost:
find_package(Boost 1.36.0)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(foo foo.cc)
endif()
Найти библиотеки Boost и использовать импортированные цели:
find_package(Boost 1.56 REQUIRED COMPONENTS
date_time filesystem iostreams)
add_executable(foo foo.cc)
target_link_libraries(foo Boost::date_time Boost::filesystem
Boost::iostreams)
Найти библиотеки Boost Python 3.6 и использовать импортированные цели:
find_package(Boost 1.67 REQUIRED COMPONENTS
python36 numpy36)
add_executable(foo foo.cc)
target_link_libraries(foo Boost::python36 Boost::numpy36)
Найти заголовки Boost и некоторые статические (только релизные) библиотеки:
set(Boost_USE_STATIC_LIBS ON) # only find static libs
set(Boost_USE_DEBUG_LIBS OFF) # ignore debug libs and
set(Boost_USE_RELEASE_LIBS ON) # only find release libs
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.66.0 COMPONENTS date_time filesystem system ...)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(foo foo.cc)
target_link_libraries(foo ${Boost_LIBRARIES})
endif()
Boost CMake
Если Boost был скомпилирован с использованием проекта boost-cmake или из Boost 1.70.0, он предоставляет файл конфигурации пакета для использования с режимом конфигурации find_package. Этот модуль ищет файл конфигурации пакета, называемый BoostConfig.cmake или boost-config.cmake, и сохраняет результат в записи CACHE Boost_DIR. Если найден, файл конфигурации пакета загружается, и этот модуль возвращается без дальнейших действий. Обратитесь к документации пакета конфигурации Boost CMake для получения подробной информации о том, что он предоставляет.
Установите Boost_NO_BOOST_CMAKE в ON, чтобы отключить поиск boost-cmake.
© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.20/module/FindBoost.html