使用boost libs的预编译头文件需要很长时间才能编译

时间:2013-03-01 17:51:32

标签: c++

我正在创建一个依赖于大量增强库的软件,随着编译变得越来越慢(几分钟),我已经在预编译的头文件中反复使用了所有的库(比如20-ish boost) libs和20 std libs),希望它能解决问题。

今天,我意识到当我使用预编译头编译时,一个vanilla hello-world.cpp(甚至不包括该死的预编译头)需要15秒才能构建。预编译头是300MB左右。

因此,问题是:

- 对于这个大小的预编译头文件,预计会出现这种减速吗? (我分散地希望我犯了一些奇怪的错误,如果你们中的一个人能告诉我他经常使用2GB的预编译头并且事情顺利的话,我会非常高兴。)

- 如果预计会出现这种减速,那么我根本不相信预编译头的有用性。我错过了什么吗?

编译器:

gcc version 4.4.5 (Debian 4.4.5-8)

命令行:

g++ -include common-header.hpp -Winvalid-pch -c vanilla-hello-world.cpp

2 个答案:

答案 0 :(得分:0)

  

打包在预编译头文件中反复使用的所有库

这是你的问题,只需要包含你需要的东西。

每个TU仍然需要查阅这个庞大的预编译头。

答案 1 :(得分:0)

vanilla_hello_world.cpp文件应该以预编译头的#include开头(除了注释之外的任何其他C ++语句。

您的问题应该包括使用的命令行和由以下方法生成的控制台消息:

  1. 编译PCH的命令
  2. 在没有PCH的情况下编译vanilla_hello_world.cpp的命令
  3. 使用PCH编译vanilla_hello_world.cpp的命令。
  4. 使用“time gcc ...”显示上述每种情况的时间。

    如果PCH正在工作,时间#3将小于时间#2。

    时间#1 +时间#2很可能大于#3。 PCH的重点是#1很少需要(通常只需要一次)。