我们确实有一个使用MIDL工具创建特定标头/ iid和代理文件的项目。使用调用nmake的后置构建步骤编译这些文件并与项目的其余部分链接。
是否可以将预编译的头文件与IDL生成的文件一起使用?如何注入#include "stdafx-h"
并删除其他包含的标题?
答案 0 :(得分:1)
使用/FI option(强制包含):“此选项与在命令行上指定的每个源文件的第一行上的#include指令中使用双引号指定文件具有相同的效果, CL环境变量,或在命令文件中。“
它不会删除其他标头,但这不是必须使用预编译标头... 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
包含include guards,则将其留在a.cpp
中不是问题...
答案 1 :(得分:0)
“stdafx.h”仅仅是一种惯例。如果您知道生成的源文件始终具有包含标头的标准前缀,则可以在/Yu
开关中命名最后一个(使用预编译的标头)。要创建PCH,只需使用那些固定标题创建一个.cpp文件,然后使用/Yc
编译第i个。