Boost 库

CMake 提供 Boost 库的查找包,但其工作方式有些奇怪。FindBoost 中可获得完整的描述:这只是一个概述,并提供一个示例。务必查看页面上使用 CMake 的最低版本,然后再查看有哪些支持的选项。

首先,可以在搜索 Boost 之前设置的一组变量,自定义选定 Boost 库的行为。可设置的变量随着 CMake 的发展变得越来越多,这里仅设置三个常见的变量:

  1. set(Boost_USE_STATIC_LIBS OFF)
  2. set(Boost_USE_MULTITHREADED ON)
  3. set(Boost_USE_STATIC_RUNTIME OFF)

CMake 3.5 添加了导入目标。这些目标有助于处理依赖关系,所以这也是添加Boost库的好方法。然而,CMake 包含所有已知的 Boost 依赖信息,因此 CMake 的版本必须比 Boost 新,这样CMake才能正常工作。最近 CMake 的 合并请求 中,开始假设依赖项会从已知的上一个版本继承下来,并直接使用(同时给出警告)。这项功能也反向移植到了 CMake 3.9 中。

导入目标位于 Boost:: 命名空间。只有 Boost::boost 组件有头文件,其他组件均是预编译的库文件。这里,可以根据需要包含相应的依赖项。

下面的例子中使用了 Boost::filesystem 库:

  1. set(Boost_USE_STATIC_LIBS OFF)
  2. set(Boost_USE_MULTITHREADED ON)
  3. set(Boost_USE_STATIC_RUNTIME OFF)
  4. find_package(Boost 1.50 REQUIRED COMPONENTS filesystem)
  5. message(STATUS "Boost version: ${Boost_VERSION}")
  6. # This is needed if your Boost version is newer than your CMake version
  7. # or if you have an old version of CMake (<3.5)
  8. if(NOT TARGET Boost::filesystem)
  9. add_library(Boost::filesystem IMPORTED INTERFACE)
  10. set_property(TARGET Boost::filesystem PROPERTY
  11. INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIR})
  12. set_property(TARGET Boost::filesystem PROPERTY
  13. INTERFACE_LINK_LIBRARIES ${Boost_LIBRARIES})
  14. endif()
  15. target_link_libraries(MyExeOrLibrary PUBLIC Boost::filesystem)