【问题标题】:Possible to use precompiled headers with MIDL generated files?可以将预编译的头文件与 MIDL 生成的文件一起使用吗?
【发布时间】:2010-12-08 06:31:26
【问题描述】:

我们确实有一个项目,它使用 MIDL 工具来创建特定的头文件/iid 和代理文件。这些文件使用调用 nmake 的后期构建步骤编译并与项目的其余部分链接。

是否可以将预编译的头文件与 IDL 生成的文件一起使用?如何注入#include "stdafx-h" 并删除其他包含的标头?

【问题讨论】:

  • 您能否明确说明您的 MIDL 工具生成了哪些类型的文件,它们包含哪些内容以及与 PCH 的关系?

标签: c++ visual-studio idl precompiled-headers


【解决方案1】:

使用/FI option(强制包含):“此选项与在命令行中指定的每个源文件的第一行的#include 指令中使用双引号指定文件的效果相同,在CL环境变量,或在命令文件中。”

它不会删除其他头文件,但这对于使用预编译头文件不是必需的...您要预编译的所有头文件都应包含在 stdafx.h 中。然后,只要文件有包含保护,当它们再次包含在源中时就不会出现问题。

示例

生成的a.cpp 文件:

#include <a.h>
#include <b.h>
//rest of the code

假设您要预编译a.hb.h。然后创建文件 stdafx.h:

#include <a.h>
#include <b.h>

然后您使用 /FI 选项将此 stdafx.h 作为第一个文件包含在 a.cpp 中。如果文件a.hb.h 具有include guards,则将它们留在a.cpp 中不是问题...

【讨论】:

  • 行不通 - #include &lt;stdafx.h&gt; 的原因是为了界定源文件正常编译恢复的时间点。
  • @MSalters 实际上,在包含 stdafx.h 后会恢复正常编译。但我没有看到问题...... stdafx.h 还包括所有剩余的文件,再次包括它们应该不是问题,或者它没有,那么你为什么要删除剩余的文件文件?
  • +1 表示该答案。它确实有效 - 我只需要指定 /FI stdafx.h /Yu"stdafx.h" /Fp".\Debug\moc.pch"\
【解决方案2】:

“stdafx.h”只是一个约定。如果你知道你生成的源文件总是有一个包含头的标准前缀,你可以在/Yu开关中命名它们中的最后一个(使用预编译头)。要创建 PCH,请创建一个仅包含这些固定标头的单个 .cpp 文件,然后使用 /Yc 进行编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 2011-03-16
    • 2012-07-09
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 2010-09-08
    • 2010-11-25
    相关资源
    最近更新 更多