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

时间:2015-01-21 22:54:17

标签: c++ windows visual-studio-2012 makefile winsock2

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

为了重现,我创建了两个文件,一个名为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_AND_MEAN,win32标头将不会尝试包含rpc.h.另外我发现如果我编辑“C:\ Program Files(x86)\ Windows Kits \ 8.0 \ Include \ um \ Unknwnbase.h”,并更改“#include&lt; rpc.h&gt;”这是一条有效的道路。

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

1 个答案:

答案 0 :(得分:0)

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

如果我需要精益和平均,那么唯一的好办法就是重命名文件。

相关问题