【问题标题】:How do you deal with large dependencies in Boost?你如何处理 Boost 中的大依赖关系?
【发布时间】:2010-09-15 11:03:35
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c++ boost dependencies


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

          • 唯一的问题是,如果违反仅包含所需标头的最佳实践,则此方法效果最佳。但对我来说,快速构建最终比最佳实践更重要......
          猜你喜欢
          • 2011-05-08
          • 2016-01-05
          • 1970-01-01
          • 1970-01-01
          • 2015-05-11
          • 2018-12-02
          • 2021-12-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多