优化使用Boost的项目构建的最佳方法是什么?

时间:2009-10-30 16:45:44

标签: c++ boost

今天我有点摇摇晃晃地说,如果我们打开详细的包含,那么Boost在编译时会产生大量自动生成的包含。我们平均每个编译单元包含3000个头文件,有时甚至达到5000.几乎所有这些都是由Boost的预处理器 - 元编程funk引起的,大量相同的头文件一次又一次地被包含在一个大规模的预处理器递归中。

你认为Boost项目的每次编译3000是正常的吗?除了购买一组SSD s?

之外,我还能做些什么来优化Boost构建

4 个答案:

答案 0 :(得分:8)

真正有用的一件事是使用预编译头文件,这样许多或大部分Boost头文件都可以为整个构建编译一次,而不是每个翻译单元编译一次。

Microsoft Visual C++GCC都支持预编译头文件(与其他编译器一样)。

答案 1 :(得分:2)

预编译标题是您的朋友。基本上,编译器会解析数千个文件,将状态转储到预编译的头文件,然后编译的每个.cpp都可以直接从中实例化编译器状态,而无需再次解析文件。

Here's一个头文件的例子,其中包含了在其余代码中使用的所有增强内容(以及更多内容)。曾几何时,包括如此多的标题会成为名称冲突的配方或更糟糕(你好windows.h“max”宏我正在看着你)但是这些天模板滥用已经取代了宏滥用和大多数库(提升特别是东西是足够好的命名空间,它很少是一个问题。在这种只包含它的编码风格中,担心.cpp认为哪些特定的命名空间值得通过“使用命名空间”指令升级到最高级别,这取代了担心要包含哪些特定标题。

答案 2 :(得分:0)

  • 使用预编译的标题
  • 将项目划分为较小的库(这也有助于控制依赖关系)
  • 看看C ++ 11标准库 - Boost的某些部分已被采用

答案 3 :(得分:0)

由于您正在使用boost,以防您不知道它(不幸的是很多人不知道),请考虑使用随附的bcp实用程序。我得到的印象是,每当你构建项目时,你都在构建整体提升,这可能不是你真正想要的。看看你实际使用的提升部分,并要求bcp为你复制它们。

因此,使用bcp加上预编译的标头可能会提升(双关语)你的构建时间很多。