私はC++を初めて使用します。現在、グループプロジェクトに取り組んでおり、クラスをラボコンピューター(Windows)とコンピューター(Mac OS X)の両方と互換性を持たせたいと考えています。
ファイルの先頭に配置しているものは次のとおりです。
#ifdef TARGET_OS_X
# include <GLUT/glut.h>
# include <OpenGL/OpenGL.h>
#Elif defined _WIN32 || defined _WIN64
# include <GL\glut.h>
#endif
この質問は以前に尋ねられたことに気づきましたが、私の検索では「_MAC」、「TARGET_MAC_OS」、「Macintosh」などの矛盾する答えが返ってきました。 Macと互換性がありますか?現時点では機能していません。
ありがとうございました!
この答え によると:
#ifdef __Apple__
#include "TargetConditionals.h"
#ifdef TARGET_OS_IPHONE
// iOS
#Elif TARGET_IPHONE_SIMULATOR
// iOS Simulator
#Elif TARGET_OS_MAC
// Other kinds of Mac OS
#else
// Unsupported platform
#endif
#endif
要するに:
#ifdef __Apple__
#include "TargetConditionals.h"
#ifdef TARGET_OS_MAC
#include <GLUT/glut.h>
#include <OpenGL/OpenGL.h>
#endif
#Elif defined _WIN32 || defined _WIN64
#include <GL\glut.h>
#endif
コンパイラに依存します。 #ifdef __Apple__
はgccで機能します。
小さな修正:#ifdef TARGET_OS_MACは、プラットフォームに応じて0または1を定義するため、OS XとiOSの両方で常にtrueになりますが、Appleが定義されるとTARGET_OS_MACも定義されるため、 #ifdef内でチェックするAppleは無意味です。代わりに#if TARGET_OS_MACを使用できます。すべてのTARGET_ *マクロで同じです。
マイクロソフトによると、_WIN32
は、Windowsの32ビットバージョンと64ビットバージョンの両方をカバーします。そして__Apple__
はClangで動作します(少なくともMavericksでは)。したがって、上記のifdefを記述する正しい方法は次のとおりです。
#ifdef __Apple__
DoSomething();
#Elif _WIN32
DoSomethingElse();
#else
GenerateErrorOrIgnore