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

C++ 如何处理Boost中的大型依赖关系?,c++,boost,dependencies,C++,Boost,Dependencies,Boost是一个非常大的库,具有许多相互依赖关系——编译也需要很长时间(对我来说,这会减慢响应时间) 我使用的boost的唯一部分是boost::regex和boost::format 是否有一种简单的方法可以只提取特定boost子库所需的boost部分,从而加快编译速度 编辑:要回答关于我们为什么要构建boost的问题 解析boost头文件仍然需要很长时间。我怀疑如果我们能够只提取我们需要的东西,解析也会更快 我们的CruiseControl设置从头开始构建一切。如果我们更新我们正在使用的bo

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

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

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

编辑:要回答关于我们为什么要构建boost的问题

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

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

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

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

    我们使用的是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})