你如何处理Boost中的大型依赖?

时间:2008-10-06 06:42:49

标签: c++ boost dependencies

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

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

是否有一种简单的方法可以仅提取特定boost子库所需的boost部分,从而更快地进行编译?

编辑:回答关于我们为什么要重新建立提升的问题......

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

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

我们正在使用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})

答案 3 :(得分:1)

预编译的标题是当天的词!在预编译的头文件中包含所需的boost头文件 - tada!