[英]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.