【发布时间】:2012-09-08 09:52:58
【问题描述】:
阅读this nice article(预编译头文件的维护和提供)后,我对这些如何在现实生活中实际工作存在一些疑问。更具体地说,我怎么知道我需要在以下场景中触发预编译头的重建:
- 我决定
#define在我的一个 .cpp 文件中更改预处理器解释某些已包含在我的预编译头文件中的头文件的方式 - 我在我的一个 .cpp 文件中包含另一个标头,
#defines 是一个特定的预处理器指令,它改变了预处理器解释预编译标头中已包含的标头的方式 - 更糟糕的是,当某些标头
#include其他标头时,上一个问题可能会递归发生
是否应该使用预编译的标头强制执行某种限制性编码样式,例如将 .cpp 文件中包含的标头数量限制为一个,而不是 #defineing .cpp 文件中的内容?
虽然微软的编译器可能在预编译头文件方面做得不错(通过应用一些特定于 MS 的巫术),因为据我所知,它提供了应该做所有事情的 /Yc 和 /Yu 选项管道,对于 GCC,这个功能似乎需要在 Makefile 中进行大量的手动工作和创造性,我无法找到一个模板来解决使用预编译头文件的所有缺陷。
例如,如果我有一个构建多个库的项目,为了在每次更改后不重新构建所有库,我必须在 Makefile 中使用一些非常可爱的sed tricks 来检测其中一个标头 @987654330 @d 被当前库修改(或者它的#includesa 修改了头文件)。我什至害怕想到预先构建的标头实际上会带来的复杂性,以便构建脚本在每次有必要时都重新构建它们。
【问题讨论】:
标签: c++ gcc dependencies precompiled-headers