如何处理Boost中的大型依赖关系

How do you deal with large dependencies in Boost?

本文关键字:大型 依赖 关系 Boost 何处理 处理      更新时间:2023-10-16

Boost是一个非常大的库,具有许多相互依赖关系,编译也需要很长时间(对我来说,这会减慢我们的CruiseControl响应时间)。

我使用的boost的唯一部分是boost::regex和boost::format。

有没有一种简单的方法可以只提取特定boost子库所需的boost部分,以加快编译速度?

编辑:为了回答我们为什么要重建助推。。。

  1. 解析boost头文件仍然需要很长时间。我怀疑,如果我们只提取我们需要的东西,解析也会更快
  2. 我们的CruiseControl设置从头开始构建一切。如果我们更新我们正在使用的boost版本,这也会更容易。但我将进行调查,看看我们是否可以更改构建过程,看看我们的构建机器是否可以在发生更改时构建boost,并将这些更改提交给SVN。(我的公司有一项政策,所有出门的东西都必须建立在"构建机器"上。)

首先,您可以使用bcp工具(可以在tools子文件夹中找到)来提取您正在使用的标头和文件。不过,这对编译时间没有帮助。其次,你不必每次都重建Boost。只需在每次版本更改时预构建一次lib文件,并在构建时复制"stage"文件夹。

除非您正在修补boost库本身,否则没有理由在每次构建时重新编译它。

我们使用Boost,但我们只包含实际使用的类型的对象文件。也就是说,我们用一堆自制的实用程序构建了自己的静态库,并包含了Boost中我们认为有用的部分。我们的CMakeLists.txt看起来像这样(如果你相应地调整SOURCES,你应该能够在CMake中加载它。)

project( MyBoost )
set(SOURCES 
  boost/regex/src/c_regex_traits.cpp
  boost/regex/src/cpp_regex_traits.cpp
  boost/regex/src/cregex.cpp
  boost/regex/src/fileiter.cpp
  boost/regex/src/icu.cpp
  boost/regex/src/instances.cpp
  boost/regex/src/posix_api.cpp
  boost/regex/src/regex.cpp
  boost/regex/src/regex_debug.cpp
  boost/regex/src/regex_raw_buffer.cpp
  boost/regex/src/regex_traits_defaults.cpp
  boost/regex/src/static_mutex.cpp
  boost/regex/src/usinstances.cpp
  boost/regex/src/w32_regex_traits.cpp
  boost/regex/src/wc_regex_traits.cpp
  boost/regex/src/wide_posix_api.cpp
  boost/regex/src/winstances.cpp
)
add_library( MyBoost STATIC ${SOURCES})

预编译的页眉是当今的流行语!在预编译的头中包含您需要的boost头-tada!