SDL2、MacOSX和OpenGL:如何避免同时包含gl.h和gl3.h?
我正在使用OpenGL 3.2核心配置文件开发一个SDL2应用程序。编译时,我得到以下警告: /System/Library/Frameworks/OpenGL.framework/Headers/gl.h:5:2:警告: #警告gl.h和gl3.h均包括在内。如果使用已删除的OpenGL功能,编译器将不会调用错误。[-Wcpp] 我必须假设SDL在某处包含gl.h,因为我的唯一包含如下:SDL2、MacOSX和OpenGL:如何避免同时包含gl.h和gl3.h?,macos,opengl,sdl,sdl-2,Macos,Opengl,Sdl,Sdl 2,我正在使用OpenGL 3.2核心配置文件开发一个SDL2应用程序。编译时,我得到以下警告: /System/Library/Frameworks/OpenGL.framework/Headers/gl.h:5:2:警告: #警告gl.h和gl3.h均包括在内。如果使用已删除的OpenGL功能,编译器将不会调用错误。[-Wcpp] 我必须假设SDL在某处包含gl.h,因为我的唯一包含如下: #define GL3_PROTOTYPES #include <OpenGL/gl3.h>
#define GL3_PROTOTYPES
#include <OpenGL/gl3.h>
#include <SDL2/SDL.h>
#定义GL3#U原型
#包括
#包括
虽然我可以忽略这一点,但当我意外地使用了核心配置文件中不可用的枚举值时,它已经导致了一个难以发现的错误。有什么方法可以阻止gl.h被包含吗?看看
/System/Library/Frameworks/OpenGL.framework/Headers/gl.h
,你应该会在第一行看到一个非常标准的include-guard:\ifndef\uu gl\uh
。如果您查看gl3.h
,您将注意到\uu gl3\u h
有一个同样标准的include-guard。仅当两者都已定义且GL\u DO\u NOT\u未定义时才会触发此警告
防止在gl.h
中包含任何内容的最简单方法是在包含之前定义它。为了避免把你的实际代码弄乱,像:
苹果公司__
#定义_
#如果包含多个GL版本标题,则定义GL不警告
#恩迪夫
我建议将-D_ugl_h_u-DGL_DO_NOT_WARN_如果包含多个版本头
作为编译器开关添加到目标OS X时的Makefile中(这样无论gl.h
间接包含在哪里,它都不会做任何事情)。这确实不是解决这个问题的正确方法,生成警告是有原因的(您在问题中指出了这一点——当包含两个头时,不推荐使用的OpenGL标记将不会生成编译器警告/错误)
我认为SDL2本身应该有一些预处理器机制来完成我在上面用\ifdef\uuuu APPLE\uuuu
所做的工作,但取而代之的是,这将完成工作。无论以何种方式将两者都包括在内都不是一个错误,OS X只是提供了一种方便的机制,当不推荐的令牌(例如,GL\u MODELVIEW
)在一个应该是core 3+的项目中使用时,生成编译器错误
在其他平台上,无论您使用的是核心OpenGL 3+在编译时都不是黑白的,因此编译器不能用于此目的。这是苹果所做的事情之一,因为他们能够做到;“换个角度思考。”此警告在SDL2的2.0.4候选版本中消失。 SDL邮件列表上共享了发布候选版本的临时链接。
回答得很好。定义
\uu gl\u h\uu
似乎会在SDL内部引起一些问题,但这是一个单独的问题。我会看看我能直接从他们的社区找到什么。