我是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兼容?现在它不起作用。
谢谢!
答案 0 :(得分:34)
根据this answer:
#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
答案 1 :(得分:11)
这取决于编译器。 #ifdef __APPLE__
适用于gcc。
答案 2 :(得分:4)
小修正:#ifdef TARGET_OS_MAC将在OS X和iOS上始终保持正确,因为它根据平台定义为0或1,但是当定义 APPLE 时,TARGET_OS_MAC定义为那么,在#ifdef APPLE 中查看它是没有价值的。 您可能希望使用#if TARGET_OS_MAC。所有TARGET_ *宏都相同。
答案 3 :(得分:2)
据微软称,_WIN32
将涵盖32位和64位版本的Windows。 __APPLE__
适用于Clang(至少在小牛队)。因此,编写上述ifdef的一种正确方法是:
#ifdef __APPLE__
DoSomething();
#elif _WIN32
DoSomethingElse();
#else
GenerateErrorOrIgnore