FindBoost
Поиск директорий заголовков и библиотек Boost
Используйте этот модуль, вызвав find_package в формате:
find_package(Boost [version] [EXACT] # Minimum or EXACT version e.g. 1.36.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"
Этот модуль находит заголовки и запрошенные библиотеки компонентов ИЛИ файл конфигурации пакета 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 - BOOST_VERSION value from boost/version.hpp
Boost_LIB_VERSION - Version string appended to library filenames
Boost_MAJOR_VERSION - Boost major version number (X in X.y.z)
Boost_MINOR_VERSION - Boost minor version number (Y in x.Y.z)
Boost_SUBMINOR_VERSION - Boost subminor version number (Z in x.y.Z)
Boost_LIB_DIAGNOSTIC_DEFINITIONS (Windows)
- Pass to add_definitions() to have diagnostic
information about Boost's automatic linking
displayed during compilation
Этот модуль считывает подсказки о местоположении поиска из переменных:
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::boost - Target for header-only dependencies
(Boost include directory)
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, будут автоматически обнаружены и удовлетворены, даже если system не указан при использовании find_package и если Boost::system не добавлен в target_link_libraries. Если используется Boost::thread, то Thread::Thread также будет добавлен автоматически.
Важно отметить, что импортированные целевые элементы ведут себя иначе, чем переменные, созданные этим модулем: несколько вызовов find_package(Boost) в одной директории или поддиректориях с различными опциями (например, статической или динамической) не переопределят значения целевых элементов, созданных первым вызовом.
Пользователи могут задать эти подсказки или результаты как записи кэша. Проекты не должны читать эти записи напрямую, а вместо этого должны использовать указанные выше переменные результатов. Обратите внимание, что некоторые имена подсказок начинаются с заглавной буквы «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_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.
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_DETAILED_FAILURE_MSG
- Set to ON to add detailed information to the
failure message even when the REQUIRED option
is not given to the find_package call.
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.42.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 и некоторых статических библиотек:
set(Boost_USE_STATIC_LIBS ON) # only find static libs
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.36.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, он предоставляет файл конфигурации пакета для использования с режимом Config find_package. Этот модуль ищет файл конфигурации пакета с именем BoostConfig.cmake или boost-config.cmake и сохраняет результат в записи кэша «Boost_DIR». Если файл найден, файл конфигурации пакета загружается, и этот модуль завершается без дальнейших действий. Подробную информацию о том, что он предоставляет, см. в документации по конфигурации пакета Boost CMake.
Установите Boost_NO_BOOST_CMAKE в ON, чтобы отключить поиск boost-cmake.
© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.6/module/FindBoost.html