2014-10-06 86 views
1

最近我启用了/ W4警告(MSVC)来清理我的项目中的一点,并注意到GLM使用由#define GLM_HAS_ANONYMOUS_UNION守卫的非标准编译器扩展,导致非常长的警告喷涌。什么是正确的方式来配置GLM

似乎有编译器功能检测机制,但我无法完全禁用编译器扩展,因为Windows SDK依赖关系,并且/ Za无论如何都是不鼓励的。那么在GLM中禁用特定事物的正确方法是什么? 我可以在每个使用GLM的地方拍一个#undef,但是有没有一个“适当”的地方来配置这些东西,比如单独的配置文件或者其他东西?我不时升级GLM,所以我不想修改GLM代码中的定义。

回答

1

我碰到了和你一样的问题。 GLM将尝试使用编译器的所有功能,如果它检测到VS,它将使用非标准扩展来做一些奇特的事情。

如果您希望这些非标准化的东西走开(例如无名工会/结构) 您可以通过使用

#define GLM_FORCE_CXX11 

你包括任何GLM头之前切换GLM至标准模式。

我插入这个信息从手动在: http://glm.g-truc.net/0.9.7/glm-0.9.7.pdf

或者你可以看看通过编译警告推禁用此非常具体的警告

#pragma warning(push) 
#pragma warning(disable:4201) // suppress even more warnings about nameless structs 
#include<glm/glm.hpp> 
#pragma warning pop 

更多信息以https://msdn.microsoft.com/en-us/library/aa273936(v=vs.60).aspx

相关问题