可以在MIDL生成的文件中使用预编译头文件吗?

时间:2009-10-20 08:43:20

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

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

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

2 个答案:

答案 0 :(得分: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中不是问题...

答案 1 :(得分:0)

“stdafx.h”仅仅是一种惯例。如果您知道生成的源文件始终具有包含标头的标准前缀,则可以在/Yu开关中命名最后一个(使用预编译的标头)。要创建PCH,只需使用那些固定标题创建一个.cpp文件,然后使用/Yc编译第i个。