You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CMake配置阶段自动构建所需的Boost库?

在CMake配置阶段自动构建指定Boost库的方案

核心思路

通过FetchContent拉取Boost源码后,先编译Boost自带的bcp工具,用它提取你实际需要的Boost模块到独立目录,最后针对这个精简目录配置并构建仅所需的Boost库,全程在CMake配置阶段完成,避免全量编译Boost的冗余耗时。

具体CMake脚本实现

# 1. 定义需要的Boost组件列表
set(REQUIRED_BOOST_COMPONENTS filesystem program_options)

# 2. 用FetchContent拉取Boost源码
include(FetchContent)
FetchContent_Declare(
  boost_src
  URL https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.gz
  URL_HASH SHA256=3e377e7291b7661a7d493716805f609f6593e1a3b8a07fd694f0c94c1908d501
)
FetchContent_MakeAvailable(boost_src)

# 3. 构建bcp工具(Boost自带的组件提取工具)
execute_process(
  COMMAND ${CMAKE_COMMAND} -S ${boost_src_SOURCE_DIR} -B ${boost_src_BINARY_DIR}/bcp_build
  -DBOOST_BUILD_BCP=ON -DBUILD_TESTING=OFF
  WORKING_DIRECTORY ${boost_src_SOURCE_DIR}
  RESULT_VARIABLE BCP_BUILD_RESULT
)
if(NOT BCP_BUILD_RESULT EQUAL 0)
  message(FATAL_ERROR "Failed to configure bcp build")
endif()

execute_process(
  COMMAND ${CMAKE_COMMAND} --build ${boost_src_BINARY_DIR}/bcp_build --target bcp
  RESULT_VARIABLE BCP_BUILD_RESULT
)
if(NOT BCP_BUILD_RESULT EQUAL 0)
  message(FATAL_ERROR "Failed to build bcp tool")
endif()

# 4. 用bcp提取所需组件到指定目录
set(BOOST_MINIMAL_DIR ${CMAKE_BINARY_DIR}/boost_minimal)
file(MAKE_DIRECTORY ${BOOST_MINIMAL_DIR})

execute_process(
  COMMAND ${boost_src_BINARY_DIR}/bcp_build/bin/bcp ${REQUIRED_BOOST_COMPONENTS} ${BOOST_MINIMAL_DIR}
  WORKING_DIRECTORY ${boost_src_SOURCE_DIR}
  RESULT_VARIABLE BCP_EXTRACT_RESULT
)
if(NOT BCP_EXTRACT_RESULT EQUAL 0)
  message(FATAL_ERROR "Failed to extract required Boost components")
endif()

# 5. 配置并构建精简后的Boost库
execute_process(
  COMMAND ${CMAKE_COMMAND} -S ${BOOST_MINIMAL_DIR} -B ${CMAKE_BINARY_DIR}/boost_build
  -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF
  -DBOOST_ENABLE_CMAKE=ON -DBOOST_COMPONENTS=${REQUIRED_BOOST_COMPONENTS}
  RESULT_VARIABLE BOOST_CONFIG_RESULT
)
if(NOT BOOST_CONFIG_RESULT EQUAL 0)
  message(FATAL_ERROR "Failed to configure minimal Boost build")
endif()

execute_process(
  COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/boost_build --target install
  RESULT_VARIABLE BOOST_BUILD_RESULT
)
if(NOT BOOST_BUILD_RESULT EQUAL 0)
  message(FATAL_ERROR "Failed to build minimal Boost libraries")
endif()

# 6. 引入构建好的Boost库供项目使用
find_package(Boost REQUIRED COMPONENTS ${REQUIRED_BOOST_COMPONENTS} PATHS ${CMAKE_BINARY_DIR}/boost_build/install)

关键步骤说明

  • FetchContent拉取源码:指定Boost版本和哈希值确保下载完整性,FetchContent_MakeAvailable自动完成源码下载与解压。
  • 构建bcp工具:通过单独构建目录编译bcp,关闭测试编译加快速度,execute_process在CMake配置阶段直接触发构建流程。
  • bcp提取组件:bcp会自动提取指定组件的所有依赖源码,避免手动遗漏依赖项,输出到独立目录方便后续精简构建。
  • 精简构建Boost:针对提取后的目录配置CMake,仅启用所需组件,关闭共享库、测试等不需要的选项,最后执行安装到指定路径。
  • 引入使用:通过find_package指向自定义构建的Boost目录,确保项目使用刚编译的精简版本。

注意事项

  • 可替换脚本中的Boost版本和SHA256哈希值为实际需求的版本对应值。
  • 根据项目需求调整BUILD_SHARED_LIBS选项,决定编译静态或共享库。
  • 如果需要自定义编译选项(如C++标准、编译优化等级),可在配置Boost构建时添加对应CMake参数。

内容的提问来源于stack exchange,提问作者Weench

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:06:27