2008-10-06 57 views
8

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

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

是否有一种简单的方法可以只提取特定增强子库所需的增强部分,以使编译速度更快?

编辑:要回答为什么我们正在重新建设提升的问题...

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

回答

8

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

2

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

1

预编译头文件是当天的话!在你的预编译头文件中加入你需要的boost头文件 - tada!

+0

这个唯一的问题是,这个工作最好的,如果一个违反仅包括最佳实践必需的标题。但对我而言,快速构建最终比最佳实践更重要...... – 2011-03-27 16:00:00

1

我们正在使用Boost,但我们只包含那些实际使用的类型的对象文件。也就是说,我们用一大堆本土公用事业公司建立我们自己的静态库,包括我们认为有用的Boost的那些部分。我们CMakeLists.txt看起来是这样的(你应该能够在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})