1

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

今天,我意识到当我使用预编译头编译时,一个普通的 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
4

2 回答 2

0

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

这是您的问题,只需包含您需要的内容。

每个 TU 仍然必须查阅这个庞大的预压缩标头。

于 2013-03-01T17:56:10.717 回答
0

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

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

  1. 编译 PCH 的命令
  2. 在没有 PCH 的情况下编译 vanilla_hello_world.cpp 的命令
  3. 使用 PCH 编译 vanilla_hello_world.cpp 的命令。

使用“time gcc ...”显示上述各项的时间。

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

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

于 2013-03-01T18:20:42.677 回答