2014-10-06 30 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

相關問題