查找提升¶
查找 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”构建提供的 CMake 包配置文件。对于后一种情况,请跳至下面的 提升CMake 部分。
在 3.7 版本加入: bzip2 和 zlib 组件(仅限 Windows)。
在 3.11 版本加入: OPTIONAL_COMPONENTS 选项。
在 3.13 版本加入: stacktrace_* 组件。
在 3.19 版本加入: 所有平台上的``bzip2`` 和``zlib`` 组件。
结果变量¶
该模块定义了以下变量:
Boost_FOUND如果找到标头和请求的库,则为真。
Boost_INCLUDE_DIRS提升包括目录。
Boost_LIBRARY_DIRSBoost 库的链接目录。
Boost_LIBRARIESBoost 组件库被链接。
Boost_<COMPONENT>_FOUND如果找到组件
<COMPONENT>则为真(<COMPONENT>名称为大写)。Boost_<COMPONENT>_LIBRARY链接组件``<COMPONENT>`` 的库(可能包括:command:target_link_libraries 调试/优化关键字)。
Boost_VERSION_MACROBOOST_VERSION来自``boost/version.hpp`` 的值。Boost_VERSION_STRING以
X.Y.Z格式提升版本号。Boost_VERSION以
X.Y.Z格式提升版本号(与Boost_VERSION_STRING相同)。在 3.15 版本发生变更: 在以前的 CMake 版本中,此变量使用来自 Boost 标头的原始版本字符串(与“Boost_VERSION_MACRO”相同)。请参阅政策:policy:CMP0093。
Boost_LIB_VERSION附加到库文件名的版本字符串。
Boost_VERSION_MAJOR,Boost_MAJOR_VERSION提升主要版本号(
X.Y.Z中的``X``)。Boost_VERSION_MINOR,Boost_MINOR_VERSION提升次要版本号(
X.Y.Z中的``Y``)。Boost_VERSION_PATCH,Boost_SUBMINOR_VERSION提升次要版本号(
X.Y.Z中的``Z``)。Boost_VERSION_COUNT版本组件的数量 (3)。
- ``Boost_LIB_DIAGNOSTIC_DEFINITIONS``(特定于 Windows)
传递给
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首选包含目录,例如``<前缀>/include``。
BOOST_LIBRARYDIR首选图书馆目录,例如``<前缀>/lib``。
Boost_NO_SYSTEM_PATHS设置为
ON以禁用在这些提示变量未指定的位置进行搜索。默认为“关闭”。Boost_ADDITIONAL_VERSIONS此模块未知的 Boost 版本列表。 (提升安装位置可能包含版本)。
用户可以将这些提示或结果设置为“CACHE”条目。项目不应直接读取这些条目,而应使用上述结果变量。请注意,一些提示名称以大写“BOOST”开头。如果未将它们指定为 CMake 变量或缓存条目,则可以将它们指定为环境变量。
该模块首先使用上述提示变量(不包括 BOOST_LIBRARYDIR)搜索 Boost 头文件,并将结果保存在 Boost_INCLUDE_DIR 中。然后它使用上述提示(不包括 BOOST_INCLUDEDIR 和 Boost_ADDITIONAL_VERSIONS)、Boost_INCLUDE_DIR 附近的“lib”目录和下面的库名称配置设置搜索请求的组件库。它将库目录保存在“Boost_LIBRARY_DIR_DEBUG”和“Boost_LIBRARY_DIR_RELEASE”中,并将各个库位置保存在“Boost_<COMPONENT>_LIBRARY_DEBUG”和“Boost_<COMPONENT>_LIBRARY_RELEASE”中。当一个人更改同一构建树中先前搜索使用的设置(不包括环境变量)时,此模块会丢弃受更改影响的先前搜索结果并再次搜索。
进口目标¶
在 3.5 版本加入.
该模块定义了以下 IMPORTED 目标:
升压 ::升压仅标头依赖项的目标。 (提升包括目录)。
Boost::headers在 3.15 版本加入:
Boost::boost的别名。提升 ::<组件>针对特定组件依赖项(共享或静态库)的目标;
<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::system 的 Boost::filesystem 将被自动检测和满足,即使在使用 find_package() 时未指定系统,并且如果 Boost::system `` 未添加到 :command:`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 以强制使用静态库。默认为“关闭”。
Boost_USE_STATIC_RUNTIME设置为
ON或OFF以指定是否使用静态链接到 C++ 运行时的库(“s”标签)。默认值取决于平台。Boost_USE_DEBUG_RUNTIME设置为“ON”或“OFF”以指定是否使用链接到 MS 调试 C++ 运行时(“g”标签)的库。默认为``ON``。
Boost_USE_DEBUG_PYTHON设置为
ON以使用使用调试 Python 构建(“y”标签)编译的库。默认为“关闭”。Boost_USE_STLPORT设置为
ON以使用使用 STLPort(“p”标签)编译的库。默认为“关闭”。Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS设置为 ON 以使用使用 STLPort 弃用的“本地 iostreams”(“n”标签)编译的库。默认为“关闭”。
Boost_COMPILER设置为特定于编译器的库后缀(例如
-gcc43)。默认值是为正在使用的 C++ 编译器自动计算的。在 3.9 版本发生变更: 如果应测试多个兼容的后缀,则可以使用一个列表,按优先顺序降序排列。
Boost_LIB_PREFIX在 3.18 版本加入.
设置为 Boost 静态库使用的特定于平台的库名称前缀(例如
lib)。这仅在 CMake 默认情况下不知道前缀的平台上才需要。Boost_ARCHITECTURE在 3.13 版本加入.
设置为特定于体系结构的库后缀(例如“-x64”)。默认值是为正在使用的 C++ 编译器自动计算的。
Boost_THREADAPIthread组件库名称的后缀,例如pthread或win32。有和没有这个后缀的名字都会被尝试。Boost_NAMESPACE用于构建 boost 的备用命名空间,例如如果设置为“myboost”,将搜索“myboost_thread”而不是“boost_thread”。
可以设置以控制此模块的其他变量是:
Boost_DEBUG设置为“ON”以启用“FindBoost”的调试输出。请在提交任何错误报告之前启用此功能。
Boost_REALPATH设置为
ON以解析已发现库的符号链接以协助打包。例如,“系统”组件库可能会解析为“/usr/lib/libboost_system.so.1.67.0”而不是“/usr/lib/libboost_system.so”。这不会影响链接,除非用户需要此信息,否则不应启用。Boost_LIBRARY_DIRBoost_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 标头和一些 static (仅发布)库:
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()
提升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 的搜索。