para macbook mac devc dev c++ macos compatibility conditional-compilation

macbook - c++#ifdef Pregunta de Mac OS X



dev c++ macbook (4)

Soy bastante nuevo en C ++. Actualmente estoy trabajando en un proyecto de grupo y queremos que nuestras clases sean compatibles tanto con las computadoras de laboratorio (Windows) como con mi computadora (Mac OS X).

Esto es lo que hemos estado poniendo en la parte superior de nuestros archivos:

#ifdef TARGET_OS_X # include <GLUT/glut.h> # include <OpenGL/OpenGL.h> #elif defined _WIN32 || defined _WIN64 # include <GL/glut.h> #endif

Me doy cuenta de que esta pregunta se me ha preguntado antes, pero mis búsquedas me han dado respuestas contradictorias, como "_MAC", "TARGET_MAC_OS", "MACINTOSH", etc. ¿Cuál es la declaración correcta y actual para poner en la declaración #ifdef para hacer esto? compatible con Mac? En este momento no está funcionando.

¡Gracias!


Corrección pequeña: #ifdef TARGET_OS_MAC hará que siempre sea cierto tanto en OS X como en iOS, ya que define 0 o 1 según la plataforma, pero cuando se define APPLE, también se define TARGET_OS_MAC, por lo que se verifica dentro de #ifdef APPLE no vale nada Es posible que desee utilizar #if TARGET_OS_MAC en su lugar. Lo mismo para todas las macros TARGET_ *.


De acuerdo con esta respuesta :

#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

En resumen:

#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


Depende del compilador. #ifdef __APPLE__ funciona para gcc.


Según Microsoft, _WIN32 cubrirá las versiones de Windows de 32 y 64 bits. Y __APPLE__ funciona para Clang (al menos en Mavericks). Entonces, una manera correcta de escribir el ifdefs anterior es:

#ifdef __APPLE__ DoSomething(); #elif _WIN32 DoSomethingElse(); #else GenerateErrorOrIgnore