簡體   English   中英

c ++ #ifdef Mac OS X 問題

[英]c++ #ifdef Mac OS X question

我對 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”等。在#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 <GL\glut.h>
#endif 

這取決於編譯器。 #ifdef __APPLE__適用於 gcc。

小更正:#ifdef TARGET_OS_MAC 將使您在 OS X 和 iOS 上始終為真,因為它根據平台定義了 0 或 1,但是當定義了APPLE時,TARGET_OS_MAC 也被定義了,因此在 #ifdef APPLE 中檢查它毫無價值。 您可能想改用 #if TARGET_OS_MAC。 所有 TARGET_* 宏都相同。

據微軟稱, _WIN32將涵蓋 32 位和 64 位版本的 Windows。 __APPLE__適用於 Clang(至少在小牛隊)。 因此,編寫上述 ifdef 的一種正確方法是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM