FindBoost
Изменено в версии 3.30: Этот модуль доступен только в том случае, если политика CMP0167 не установлена в NEW. Проекты порта переносятся в конфигурационный файл пакета BoostConfig.cmake Boost upstream, для которого find_package(Boost) теперь ищет.
Поиск заголовочных файлов и библиотек 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 debug 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 для использования библиотек, скомпилированных с устаревшими "native 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–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/module/FindBoost.html