在阅读了这篇好文章(预编译头文件的护理和提供)之后,我对这些如何在现实生活中实际工作有一些疑问。更具体地说,我怎么知道我需要在以下场景中触发预编译头的重建:
- 我决定
#define
在我的一个 .cpp 文件中更改预处理器解释一些已包含在我的预编译头文件中的头文件的方式 - 我在我的一个 .cpp 文件中包含另一个头文件,它
#define
是一个特定的预处理器指令,它改变了预处理器解释已包含在预编译头文件中的头文件的方式 - 更糟糕的是,上一个问题可能会递归地发生,当某些标头
#include
其他标头时
预编译头文件的使用是否应该强制执行某种限制性编码样式,例如将 .cpp 文件中包含的头文件数量限制为一个,并且永远不会#define
在 .cpp 文件中添加内容?
虽然 Microsoft 的编译器可能在预编译头文件方面做得不错(通过应用一些特定于 MS 的巫术),因为据我所知,它提供了应该完成所有工作的/Yc
和/Yu
选项,但对于 GCC 来说,这似乎是功能需要在 Makefile 中进行大量手动工作和创造力,我无法找到一个可以解决使用预编译头文件的所有缺陷的模板。
例如,如果我有一个构建多个库的项目,为了不在每次更改后重新构建所有库,我必须在 Makefile 中使用一些非常可爱的sed
技巧来检测#include
当前库的头文件之一是否被修改(或者它#include
是修改后的标题)。我什至害怕想到预先构建的标头实际上会暗示的复杂性,以便构建脚本在每次有必要时都重新构建它们。