VS2012 包括 win32 和本地 rpc.h header 中断构建(VS2010 工作正常)

VS2012 including win32 and local rpc.h header breaking build (and VS2010 works fine)

我正在将使用 Visual Studio 2010 构建的项目更新为使用 VS2012 构建。我在使用 VS2012 的#includes 时遇到问题:我在我的项目 RPC.h 中将其追踪到本地 header,因为 WinSock2.h 间接包含 win32 rpc.h(其中匹配我的本地文件,包括它)。这在 VS2010 中运行良好并且生成文件相同,唯一的区别是编译器。

为了重现,我创建了两个文件,一个名为 rpc.h,其中包含一个缺失的 header(第一个文件没有明确包含本地 rpc.h)。

TCPChannel.cc:

#include <WinSock2.h>
namespace foobar {
}

RPC.h:

#ifndef __INCLUDED_RPC_H
#define __INCLUDED_RPC_H
// intentionally does not exist
#include <breakme.h>
#endif

使用 "cl -c TCPChannel.cc" 编译但失败,因为 breakme.h 不存在(设置比缺少 header 更复杂,但足以作为示例)。

我发现如果我定义 WIN32_LEAN_AND_MEAN,win32 header 将不会尝试包含 rpc.h。我还发现,如果我编辑 "C:\Program Files (x86)\Windows Kits.0\Include\um\Unknwnbase.h",并将“#include ”更改为绝对路径,那也可以。

是否有其他解决方案,例如编译器标志?我想避免添加 WIN32_LEAN_AND_MEAN,并避免编辑系统 headers.

不幸的是,我找不到其他选择。来自 OP:我修改了 makefile 以定义 WIN32_LEAN_AND_MEAN,它没有 #include rpc.h,解决了我的问题。

如果我需要 lean&mean,唯一好的解决方法是重命名文件。