C++ VS2012包括win32和本地rpc.h头破坏构建(VS2010工作正常)

C++ VS2012包括win32和本地rpc.h头破坏构建(VS2010工作正常),c++,windows,visual-studio-2012,makefile,winsock2,C++,Windows,Visual Studio 2012,Makefile,Winsock2,我正在将使用Visual Studio 2010构建的项目更新为使用VS2012构建的项目。我在使用VS2012时遇到了一些问题:我跟踪到了项目中的本地头RPC.h,因为WinSock2.h间接地包含了与我的本地文件(包括它)匹配的win32 RPC.h。这在VS2010中运行良好,并且生成文件是相同的,唯一的区别是编译器 为了重现,我创建了两个文件,一个名为rpc.h,其中包含一个缺少的头,第一个文件没有明确包含本地rpc.h TCPChannel.cc: #include <WinSo

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

为了重现,我创建了两个文件,一个名为rpc.h,其中包含一个缺少的头,第一个文件没有明确包含本地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不存在。安装程序比缺少的头更复杂,但作为一个示例就足够了

我发现如果我定义WIN32_LEAN_和_MEAN,WIN32头将不会尝试包含rpc.h。我还发现,如果我编辑C:\Program Files x86\Windows Kits\8.0\Include\um\unknwbase.h,并将Include更改为aboslute路径,也可以


是否有其他解决方案,例如编译器标志?我希望避免添加WIN32\u LEAN\u和\u MEAN,并避免编辑系统标题。

不幸的是,我没有其他选择。从OP:我修改了makefile来定义WIN32_LEAN_和_MEAN,其中不包括rpc.h,修复了我的问题


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

您可以重命名您的rpc.h版本?非常好的建议。这是我的偏好,但影响太大了。我很可能不得不使用精益&均值,这个问题是我做这件事之前的最后努力。我不是win32向导