我们确实有一个项目,它使用 MIDL 工具来创建特定的头文件/iid 和代理文件。这些文件使用调用 nmake 的构建后步骤编译并与项目的其余部分链接。
是否可以将预编译的头文件与 IDL 生成的文件一起使用?如何注入#include "stdafx-h"
和删除其他包含的标头?
我们确实有一个项目,它使用 MIDL 工具来创建特定的头文件/iid 和代理文件。这些文件使用调用 nmake 的构建后步骤编译并与项目的其余部分链接。
是否可以将预编译的头文件与 IDL 生成的文件一起使用?如何注入#include "stdafx-h"
和删除其他包含的标头?
使用/FI 选项(强制包含):“此选项与在 CL 环境变量中在命令行中指定的每个源文件的第一行的 #include 指令中指定带双引号的文件的效果相同,或在命令文件中。”
它不会删除其他头文件,但这不是使用预编译头文件所必需的……您要预编译的所有头文件都应包含在 stdafx.h 中。然后,如果文件具有包含保护,那么当它们再次包含在源中时不会有问题。
例子
生成的a.cpp
文件:
#include <a.h>
#include <b.h>
//rest of the code
假设您要预编译a.h
和b.h
. 然后创建文件 stdafx.h:
#include <a.h>
#include <b.h>
然后使用 /FI 选项将此 stdafx.h 作为第一个文件包含到a.cpp
. 如果文件a.h
并b.h
包含警卫,将它们留在a.cpp
里面不是问题......
“stdafx.h”只是一个约定。如果你知道你生成的源文件总是有一个包含头文件的标准前缀,你可以在/Yu
开关中命名它们中的最后一个(使用预编译头文件)。要创建 PCH,请创建一个仅包含这些固定标头的单个 .cpp 文件,并使用 .cpp 进行编译/Yc
。