Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以将预编译头与MIDL生成的文件一起使用?_C++_Visual Studio_Idl_Precompiled Headers - Fatal编程技术网

C++ 是否可以将预编译头与MIDL生成的文件一起使用?

C++ 是否可以将预编译头与MIDL生成的文件一起使用?,c++,visual-studio,idl,precompiled-headers,C++,Visual Studio,Idl,Precompiled Headers,我们有一个项目,它使用MIDL工具创建特定的头/iid和代理文件。使用调用nmake的后期生成步骤编译这些文件并与项目的其余部分链接 是否可以将预编译头与这些IDL生成的文件一起使用?如何插入#include“stdafx-h”并删除其他包含的头?使用(强制包含):“此选项的效果与在命令行、CL环境变量或命令文件中指定的每个源文件的第一行上的#include指令中使用双引号指定文件相同。” 它不会删除其他头,但这不是使用预编译头所必需的。。。stdafx.h应该包含所有要预编译的头文件。然后,如

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

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

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

它不会删除其他头,但这不是使用预编译头所必需的。。。stdafx.h应该包含所有要预编译的头文件。然后,如果文件有包含保护,那么当它们再次包含在源代码中时就不会有问题了

示例

生成的
a.cpp
文件:

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

然后使用/FI选项将这个stdafx.h作为第一个文件包含到
a.cpp
中。如果文件
a.h
b.h
有,将它们保留在
a.cpp
中不是问题…

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

编译ith就行不通了,
#include
的原因是要划定一个点,在该点之后,源文件的正常编译将恢复。@MSalters确实,在包含stdafx.h之后,正常编译将恢复。但我不觉得有什么问题。。。stdafx.h也包含所有剩余的文件,再次包含这些文件应该不是问题,或者不包含,那么您为什么要删除剩余的文件?+1表示该答案。它确实起作用了-我只需要指定/FI stdafx.h/Yu“stdafx.h”/Fp.\Debug\moc.pch”\n您能否澄清MIDL工具生成的文件类型、它们包括什么以及它们与pch的关系?
#include <a.h>
#include <b.h>