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!

33
demandé sur Armen Tsirunyan 2011-07-23 23:49:38

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 
32
répondu orlp 2017-05-23 11:47:08

Cela dépend du compilateur. #ifdef __APPLE__ fonctionne pour gcc.

11
répondu koan 2011-07-23 19:58:31

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_*.

3
répondu Respiro 2015-02-01 12:40:45

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
1
répondu Jon Spencer 2014-08-01 19:55:33