重新排序包含目录如何解决宏重新定义问题?
Posted
技术标签:
【中文标题】重新排序包含目录如何解决宏重新定义问题?【英文标题】:How reordering include directories solves macro redefinition issue? 【发布时间】:2014-12-12 22:55:34 【问题描述】:我知道有很多关于宏重新定义问题的帖子,但我仍然无法理解重新排序如何解决问题。
当我的项目在VC++ Directories->Include Directories
中按此顺序包含时,如here 中所示
并在C/C++ -> General -> Additional Include Directories
中显示here
我收到macro redefinition
警告:
1>c:***************************************\directx\dxgitype.h(12): warning C4005: 'DXGI_STATUS_OCCLUDED' : macro redefinition (############.cpp)
1> C:\Program Files (x86)\Windows Kits\8.0\Include\shared\winerror.h(49449) : see previous definition of 'DXGI_STATUS_OCCLUDED'
但是,当我从 Additional Include Directories
中删除 $(SolutionDir)\common\ExternalLibs\directx
并将其移动到 VC++ Directories->Include Directories
时,警告就会消失。
我检查了winerror.h
和dxgitype.h
,但没有看到#undef DXGI_STATUS_OCCLUDED
。那么,重新排序如何修复警告?至少一个标头应该有#undef
,以便允许在其他标头中定义它,对吧?另外,Additional Include Directories
是在 Include Directories
之后加载的还是什么?
【问题讨论】:
不要包含指向包含您的问题的相关信息的图像的链接,如果它最终变成死链接(这很常见),它对其他社区成员毫无用处。 编辑您的帖子并将其包含在其中。 @CaptainObvlious,首先我不能在这里发布图片。当我尝试系统时说我需要超过 10 的声望才能发布图片!其次,链接没有死!那么,你为什么投了反对票?? 然后复制并粘贴包含目录配置字段的内容,并说明它们是什么以及它们来自哪些字段。 FWIW 您提供的图像不完整,并且未显示在 Visual Studio 中配置的所有包含目录。 【参考方案1】:$(SolutionDir)\common\ExternalLibs\directx
中有什么内容?我怀疑它有一个旧版 DirectX SDK 标头的副本,这意味着您将旧的 DirectX SDK 标头与新的 Windows 8.0 SDK 标头混合在一起。 MSDN 上特别提到了您看到的错误:
c。删除项目中对 DXGIType.h 的所有引用。 Windows SDK中不存在该头文件,并且DirectX SDK版本与新的winerror.h冲突。
理想情况下,您应该停止使用旧版 DirectX SDK,如果您删除该文件夹并且它仍然可以构建,那么您应该这样做。
否则,MSDN 涵盖了将旧版 DirectX SDK 与 Windows 8.x SDK 混合使用的内容。基本上,您必须将 DirectX SDK 包含/lib 路径放在 Windows 8.x SDK 包含/lib 路径之后。
请参阅 Where is the DirectX SDK 博客文章。
【讨论】:
以上是关于重新排序包含目录如何解决宏重新定义问题?的主要内容,如果未能解决你的问题,请参考以下文章
代码中,使用__DATE__宏,获取程序编译时间,如何保证每次编译代码(非重新生成方式),都能更新__DATE__的值?