c++ #ifdef Mac OS X question

c++ #ifdef Mac OS X question

本文关键字:question OS Mac #ifdef c++      更新时间:2023-10-16

我对C++还很陌生。我目前正在进行一个小组项目,我们希望使我们的课程与实验室计算机(Windows(和我的计算机(Mac OS X(兼容。

以下是我们一直放在文件顶部的内容:

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

我知道以前有人问过这个问题,但我的搜索一直给我提供相互矛盾的答案,如"MAC"、"TARGETMAC_OS"、"MACINTOSH"等。在#ifdef语句中,要使其与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 <GLglut.h>
#endif 

这取决于编译器。#ifdef __APPLE__为gcc工作。

根据微软的说法,_WIN32将涵盖32位和64位版本的Windows。__APPLE__为Clang工作(至少在小牛队(。因此,写上面的ifdefs的一个正确方法是:

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

小更正:#ifdef TARGET_OS_MAC在OS X和iOS上总是正确的,因为它根据平台定义了0或1,但当定义了APPLE时,TARGET_OS_MAC也被定义了,所以在#ifdefAPPLE中检查它是没有价值的。您可能需要使用#if TARGET_OS_MAC。所有TARGET_*宏都相同。