Werfen Sie einen Blick auf /System/Library/Frameworks/OpenGL.framework/Headers/gl.h
, sollten Sie eine hübsche Standard-Wache auf der ersten Zeile sehen: #ifndef __gl_h_
. Wenn Sie auf gl3.h
schauen, werden Sie einen gleichwertigen Standardschutz für __gl3_h_
bemerken. Diese Warnung wird nur ausgelöst, wenn beide definiert sind und GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
nicht definiert ist.
Der einfachste Weg zu verhindern, dass etwas aus gl.h
enthält wäre #define __gl_h_
, bevor es jemals enthalten ist. Um zu vermeiden, in Unordnung zu Ihrem eigentlichen Code mit etwas Gemeines wie:
#ifdef __APPLE__
# define __gl_h_
# define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
#endif
würde ich vorschlagen, -D__gl_h_ -DGL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
als Compiler-Schalter auf Ihr Makefile hinzuzufügen, wenn Sie O X Ziel (so dass, egal wo gl.h
indirekt aus enthalten, es macht nie etwas). Dies ist wirklich nicht der richtige Weg, um dies anzugehen, und diese Warnung wurde aus einem bestimmten Grund erzeugt (was Sie in Ihrer Frage angemerkt haben - veraltete OpenGL-Token erzeugen keine Compiler-Warnungen/Fehler, wenn beide Header enthalten sind).
Ich denke, SDL2 selbst sollte einige Pre-Prozessor-Mechanismus zu tun haben, was ich oben mit #ifdef __APPLE__
getan habe, aber stattdessen wird dies die Arbeit erledigt. Es ist kein Fehler, beide einzubeziehen. OS X bietet nur einen praktischen Mechanismus zum Generieren von Compilerfehlern, wenn veraltete Token (z. B. GL_MODELVIEW
) in einem Projekt verwendet werden, das Core 3+ sein soll.
Auf anderen Plattformen, ob Sie Kern OpenGL 3+ verwenden, ist nicht so schwarz und weiß zum Zeitpunkt der Kompilierung, so dass der Compiler nicht für diesen Zweck verwendet werden kann. Es ist eines dieser Dinge, die Apple tut, nur weil sie es können; "denke anders."
Große Antwort. Es sieht so aus, als ob die Definition von '__gl_h_' intern einige Probleme in SDL verursacht, aber das ist ein separates Problem. Ich werde sehen, was ich direkt von ihrer Community finden kann. – Karl