我正在更新使用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,并避免编辑系统头。
答案 0 :(得分:0)
不幸的是我找不到其他选择。从OP:我修改了makefile以定义WIN32_LEAN_AND_MEAN,它没有#include rpc.h,修复了我的问题。
如果我需要精益和平均,那么唯一的好办法就是重命名文件。