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” ниже. В первом случае результаты будут записаны в переменные:
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_LIB_PREFIX - Set to the platform-specific library name
prefix (e.g. "lib") used by Boost static libs.
This is needed only on platforms where CMake
does not know the prefix by default.
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 в режиме config. Этот модуль ищет файл конфигурации пакета, называемый 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.18/module/FindBoost.html