预编译头文件 - 选择文件

Posted

技术标签:

【中文标题】预编译头文件 - 选择文件【英文标题】:Precompiled headers - choosing files 【发布时间】:2014-07-21 09:11:53 【问题描述】:

我正在尝试选择合适的文件作为预编译头文件以减少编译时间。我使用VS2013。 我知道这应该是我的代码中的文件(例如库等,而不是重新编译所有内容)或我的代码中的文件,我不会改变很多,或者我的代码中的文件无处不在或几乎无处不在。

如果我有例如 150 个要编译的文件,其中 25 个包含一些头文件 X.hpp(来自外包库)怎么办。我应该将它添加到预编译的头文件中吗?是否有意义?其余文件(不包括 X.hpp 的文件)呢?他们不会有更长的编译时间吗?

你知道预编译头文件的大小对编译时间的影响吗?我有 10GB 的内存。像 Visual Studio 允许的那样添加到 stdafx.h 文件是个好主意吗?

【问题讨论】:

【参考方案1】:

如果您有一个文件包含在您的许多翻译单元中,那么是的,它应该放在 PCH 中。

构建时间优化是一个反复试验的过程。 PCH 可以帮助分摊编译某些东西的成本,但它不是一个完整的解决方案。如果您大量使用模板(生成式编码),那么模板实例化可能会导致大量构建开销,而 PCH 可能无济于事。

您还应该考虑前向声明和 pimpl 习惯用法。根据我的经验,对于大型项目,减少标头依赖项通常会最大程度地减少构建时间。

【讨论】:

以上是关于预编译头文件 - 选择文件的主要内容,如果未能解决你的问题,请参考以下文章

怎样添加预编译静态库 libwebrtc

error C1010:在查找预编译头文件时遇到意外的文件结尾——————vs错误

fatal error C1010: 在查找预编译头时遇到意外的文件结尾

vs2022为啥会在D盘根目录下生成windows kits文件?

错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?(转)

GCC 和预编译头文件