Spec-Zone.ru › CMake 3.15

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"

Этот модуль находит заголовочные файлы и запрошенные библиотеки компонентов Boost ИЛИ файл конфигурации пакета CMake, предоставленный сборкой “Boost CMake”. В последнем случае перейдите к разделу “Boost CMake” ниже. В первом случае результаты отображаются в переменных:

Boost_FOUND            - True if headers and requested libraries were found
Boost_INCLUDE_DIRS     - Boost include directories
Boost_LIBRARY_DIRS     - Link directories for Boost libraries
Boost_LIBRARIES        - Boost component libraries to be linked
Boost_<C>_FOUND        - True if component <C> was found (<C> is upper-case)
Boost_<C>_LIBRARY      - Libraries to link for component <C> (may include
                         target_link_libraries debug/optimized keywords)
Boost_VERSION_MACRO    - BOOST_VERSION value from boost/version.hpp
Boost_VERSION_STRING   - Boost version number in x.y.z format
Boost_VERSION          - if CMP0093 NEW => same as Boost_VERSION_STRING
                         if CMP0093 OLD or unset => same as Boost_VERSION_MACRO
Boost_LIB_VERSION      - Version string appended to library filenames
Boost_VERSION_MAJOR    - Boost major version number (X in X.y.z)
                         alias: Boost_MAJOR_VERSION
Boost_VERSION_MINOR    - Boost minor version number (Y in x.Y.z)
                         alias: Boost_MINOR_VERSION
Boost_VERSION_PATCH    - Boost subminor version number (Z in x.y.Z)
                         alias: Boost_SUBMINOR_VERSION
Boost_VERSION_COUNT    - Amount of version components (3)
Boost_LIB_DIAGNOSTIC_DEFINITIONS (Windows)
                       - Pass to add_definitions() to have diagnostic
                         information about Boost's automatic linking
                         displayed during compilation

Обратите внимание, что компоненты Boost Python требуют суффикса версии Python (Boost 1.67 и более поздние версии), например, python36 или python27 для версий, собранных с Python 3.6 и 2.7 соответственно. Это также относится к дополнительным компонентам, использующим Python, включая mpi_python и numpy. Более ранние версии Boost могут использовать суффиксы, специфичные для дистрибутива, такие как 2, 3 или 2.7. Они также могут использоваться в качестве суффиксов, но учтите, что они не являются переносимыми.

Этот модуль считывает подсказки о местах поиска из переменных:

BOOST_ROOT             - Preferred installation prefix
 (or BOOSTROOT)
BOOST_INCLUDEDIR       - Preferred include directory e.g. <prefix>/include
BOOST_LIBRARYDIR       - Preferred library directory e.g. <prefix>/lib
Boost_NO_SYSTEM_PATHS  - Set to ON to disable searching in locations not
                         specified by these hint variables. Default is OFF.
Boost_ADDITIONAL_VERSIONS
                       - List of Boost versions not known to this module
                         (Boost install locations may contain the version)

и сохраняет результаты поиска в кеше CMake:

Boost_INCLUDE_DIR         - Directory containing Boost headers
Boost_LIBRARY_DIR_RELEASE - Directory containing release Boost libraries
Boost_LIBRARY_DIR_DEBUG   - Directory containing debug Boost libraries
Boost_<C>_LIBRARY_DEBUG   - Component <C> library debug variant
Boost_<C>_LIBRARY_RELEASE - Component <C> library release variant

Также определены следующие IMPORTED целевые объекты:

Boost::headers                - Target for header-only dependencies
                                (Boost include directory)
                                alias: Boost::boost
Boost::<C>                    - Target for specific component dependency
                                (shared or static library); <C> is lower-
                                case
Boost::diagnostic_definitions - interface target to enable diagnostic
                                information about Boost's automatic linking
                                during compilation (adds BOOST_LIB_DIAGNOSTIC)
Boost::disable_autolinking    - interface target to disable automatic
                                linking with MSVC (adds BOOST_ALL_NO_LIB)
Boost::dynamic_linking        - interface target to enable dynamic linking
                                linking with MSVC (adds BOOST_ALL_DYN_LINK)

Неявные зависимости, такие как Boost::filesystem , требующие Boost::system, будут автоматически обнаружены и удовлетворены, даже если система не указана при использовании find_package() и если Boost::system не добавлено в target_link_libraries(). При использовании Boost::thread, также будет автоматически добавлено Threads::Threads.

Важно отметить, что импортированные целевые объекты ведут себя иначе, чем переменные, созданные этим модулем: несколько вызовов find_package(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_<C>_LIBRARY_DEBUG и Boost_<C>_LIBRARY_RELEASE. При изменении настроек, используемых предыдущими поисками в одном дереве сборки (исключая переменные среды), этот модуль отбрасывает предыдущие результаты поиска, затронутые изменениями, и снова проводит поиск.

Библиотеки Boost имеют множество вариантов, закодированных в их имени файла. Пользователи или проекты могут указать этому модулю, какой вариант найти, установив переменные:

Boost_USE_DEBUG_LIBS     - Set to ON or OFF to specify whether to search
                           and use the debug libraries.  Default is ON.
Boost_USE_RELEASE_LIBS   - Set to ON or OFF to specify whether to search
                           and use the release libraries.  Default is ON.
Boost_USE_MULTITHREADED  - Set to OFF to use the non-multithreaded
                           libraries ('mt' tag).  Default is ON.
Boost_USE_STATIC_LIBS    - Set to ON to force the use of the static
                           libraries.  Default is OFF.
Boost_USE_STATIC_RUNTIME - Set to ON or OFF to specify whether to use
                           libraries linked statically to the C++ runtime
                           ('s' tag).  Default is platform dependent.
Boost_USE_DEBUG_RUNTIME  - Set to ON or OFF to specify whether to use
                           libraries linked to the MS debug C++ runtime
                           ('g' tag).  Default is ON.
Boost_USE_DEBUG_PYTHON   - Set to ON to use libraries compiled with a
                           debug Python build ('y' tag). Default is OFF.
Boost_USE_STLPORT        - Set to ON to use libraries compiled with
                           STLPort ('p' tag).  Default is OFF.
Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS
                         - Set to ON to use libraries compiled with
                           STLPort deprecated "native iostreams"
                           ('n' tag).  Default is OFF.
Boost_COMPILER           - Set to the compiler-specific library suffix
                           (e.g. "-gcc43").  Default is auto-computed
                           for the C++ compiler in use.  A list may be
                           used if multiple compatible suffixes should
                           be tested for, in decreasing order of
                           preference.
Boost_ARCHITECTURE       - Set to the architecture-specific library suffix
                           (e.g. "-x64").  Default is auto-computed for the
                           C++ compiler in use.
Boost_THREADAPI          - Suffix for "thread" component library name,
                           such as "pthread" or "win32".  Names with
                           and without this suffix will both be tried.
Boost_NAMESPACE          - Alternate namespace used to build boost with
                           e.g. if set to "myboost", will search for
                           myboost_thread instead of boost_thread.

Другие переменные, которые можно установить для управления этим модулем, следующие:

Boost_DEBUG              - Set to ON to enable debug output from FindBoost.
                           Please enable this before filing any bug report.
Boost_REALPATH           - Set to ON to resolve symlinks for discovered
                           libraries to assist with packaging.  For example,
                           the "system" component library may be resolved to
                           "/usr/lib/libboost_system.so.1.67.0" instead of
                           "/usr/lib/libboost_system.so".  This does not
                           affect linking and should not be enabled unless
                           the user needs this information.
Boost_LIBRARY_DIR        - Default value for Boost_LIBRARY_DIR_RELEASE and
                           Boost_LIBRARY_DIR_DEBUG.

В компиляторах 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–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.15/module/FindBoost.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API