预编译 headers - 需要从所有其他文件中删除所有预编译 headers
Precompiled headers - necessary to remove all precompiled headers from all other files
我有一个很大的项目,为了编译速度,我开始测试预编译headers。
我现在已经设置好了一切:
- 在 VS 中启用预编译 headers(将它们用于项目,仅为
StdAfx.h
创建它)
- 对除
StdAfx.h
之外的所有程序使用多处理器编译
- 通过 VS
的强制包含自动将 StdAfx.h
包含在我的所有文件中
现在出现的问题如下:
我是否需要删除已添加到 StdAfx.h
文件中的所有项目文件的所有包含项,或者这是不必要的吗?编译器会自动跳过任何包含,因为他知道它是 StdAfx.h
的一部分,还是我应该手动从每个 .h
/.cpp
文件中删除它们?
最好的做法是让每个文件都包含该文件直接需要的所有 header。这种方式更改包含在特定文件中应该只影响这个文件。如果您开始依赖其他地方包含的 headers,这将使您的项目结构变得极其脆弱。单个 "common includes" 文件是这种情况的极端情况。使用预编译 header 应该可以通过预构建通常包含的 header 文件来加速编译,但是项目文件永远不应该假设其中已经包含了某些东西。所以不需要从“.h/.cpp”中删除包含,实际上有一些工具会根据项目文件中的包含填充预编译header。由于 header 守卫,编译器将跳过已包含在预编译 header(或其他 header 中)的文件。
我有一个很大的项目,为了编译速度,我开始测试预编译headers。
我现在已经设置好了一切:
- 在 VS 中启用预编译 headers(将它们用于项目,仅为
StdAfx.h
创建它) - 对除
StdAfx.h
之外的所有程序使用多处理器编译
- 通过 VS 的强制包含自动将
StdAfx.h
包含在我的所有文件中
现在出现的问题如下:
我是否需要删除已添加到 StdAfx.h
文件中的所有项目文件的所有包含项,或者这是不必要的吗?编译器会自动跳过任何包含,因为他知道它是 StdAfx.h
的一部分,还是我应该手动从每个 .h
/.cpp
文件中删除它们?
最好的做法是让每个文件都包含该文件直接需要的所有 header。这种方式更改包含在特定文件中应该只影响这个文件。如果您开始依赖其他地方包含的 headers,这将使您的项目结构变得极其脆弱。单个 "common includes" 文件是这种情况的极端情况。使用预编译 header 应该可以通过预构建通常包含的 header 文件来加速编译,但是项目文件永远不应该假设其中已经包含了某些东西。所以不需要从“.h/.cpp”中删除包含,实际上有一些工具会根据项目文件中的包含填充预编译header。由于 header 守卫,编译器将跳过已包含在预编译 header(或其他 header 中)的文件。