c++ #ifdef Mac OS X question
je suis assez nouveau en C++. Je travaille actuellement sur un projet de groupe et nous voulons rendre nos cours compatibles avec les ordinateurs de laboratoire (Windows) et mon ordinateur (Mac OS X).
voici ce que nous avons mis en haut de nos dossiers:
#ifdef TARGET_OS_X
# include <GLUT/glut.h>
# include <OpenGL/OpenGL.h>
#elif defined _WIN32 || defined _WIN64
# include <GLglut.h>
#endif
je me rends compte que cette question a déjà été posée, mais mes recherches m'ont donné des réponses contradictoires telles que" _MAC"," TARGET_MAC_OS"," MACINTOSH", etc. Quel est le courant et corriger la déclaration à mettre dans la déclaration # ifdef pour rendre cela compatible avec Mac? Pour l'instant il ne fonctionne pas.
Merci!
4 réponses
selon cette réponse :
#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
Donc, en résumé:
#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
Cela dépend du compilateur. #ifdef __APPLE__
fonctionne pour gcc.
petite correction: #ifdef TARGET_OS_MAC vous obtiendra toujours true à la fois sur OS X et iOS, comme il est défini soit 0 ou 1 selon la plate-forme, mais quand APPLE est défini, TARGET_OS_MAC est également défini, donc le vérifier à l'intérieur du #ifdef APPLE est sans valeur. Vous pouvez utiliser #si TARGET_OS_MAC à la place. Idem pour toutes les macros TARGET_*.
selon Microsoft, _WIN32
couvrira à la fois les versions 32-bit et 64-bit de Windows. Et __APPLE__
fonctionne pour Clang (au moins à Mavericks). Ainsi, une façon correcte d'écrire les ifdefs ci-dessus est:
#ifdef __APPLE__
DoSomething();
#elif _WIN32
DoSomethingElse();
#else
GenerateErrorOrIgnore