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"
Этот модуль находит заголовочные файлы и запрошенные библиотеки компонентов 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 - 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.7/module/FindBoost.html