c++ #ifdef Mac OS X question
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 <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_*宏都相同。
相关文章:
- "ostream &os"有什么用?
- libprotobuf 检查在 Mac OS 上执行程序时失败
- C++读取用户输入而不按回车键(Mac OS X),与Turbo Pascal中的读取键相同
- 如何在 MAC OS c/c++ 中阻止 USB 存储设备
- 编译 Boost 时在 OS X 上的"ld:未知选项:-soname"
- 在 c++ 中检查 Windows OS 服务器版本
- OS X: ld: 找不到 -lstdc++ 的库
- Python os.system() 返回错误值
- Mac os x app bundle 在下载并运行时崩溃,但在终端或更改 Info.plist 时运行良好
- const 如何防止写入特定内存 [Clang, Mac OS]
- 旧C++代码中的目录查找导致 OS X Catalina 10.15 中的目录错误
- 如何在 Mac OS 上安装 boost-mpi 及其对 clang 的依赖关系?
- 在 Mac OS 中将 QT 与 CMAKE 集成
- Homebrew OS X OpenCV - 在另一台Mac上运行时寻找dylib
- 使用C/C++访问OS X密钥链
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 从我的2d数组中的一列返回的字符串值被压缩为一个字符串(在Mac os上打开Windows txt文件)
- VK_ERROR_INCOMPATIBLE_DRIVER with Mac OS and Vulkan MoltenVK
- 无法在 OS X Sierra 上安装 boost
- c++ #ifdef Mac OS X question