を見てください。/System/Library/Frameworks/OpenGL.framework/Headers/gl.h
最初の行にかなり標準的なインクルード ガードが表示されます#ifndef __gl_h_
。を見るとgl3.h
、同様に標準的なインクルードガード for に気付くでしょう__gl3_h_
。この警告は、両方が定義されている場合GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
と未定義の場合にのみトリガーされます。
内部から何かを含めるのを防ぐ最も簡単な方法は、それが含まgl.h
れる#define __gl_h_
前にすることです。実際のコードを次のような厄介なもので台無しにしないようにするには:
#ifdef __APPLE__
# define __gl_h_
# define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
#endif
-D__gl_h_ -DGL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED
OS X をターゲットにする場合は、コンパイラ スイッチとして Makefile に追加することをお勧めします (gl.h
間接的にどこからインクルードされても、何もしないようにするため)。これは実際にこれに取り組むための正しい方法ではなく、その警告は理由で生成されました(質問で指摘しました-非推奨のOpenGLトークンは、両方のヘッダーが含まれている場合、コンパイラの警告/エラーを生成しません)。
SDL2 自体には、上記で行ったことを行うためのプリプロセッサ メカニズムが必要だと思います#ifdef __APPLE__
が、その代わりに、これで作業が完了します。両方を含めることは決してエラーではありません。OS X は、非推奨のトークン (例: GL_MODELVIEW
) がコア 3+ であると想定されるプロジェクトで使用された場合にコンパイラ エラーを生成する便利なメカニズムを提供します。
他のプラットフォームでは、コア OpenGL 3+ を使用しているかどうかはコンパイル時にそれほど白黒ではないため、この目的でコンパイラを使用することはできません。これは、Apple ができるという理由だけで行っていることの 1 つです。「違うと思う」