【发布时间】:2013-09-11 15:11:49
【问题描述】:
我正在编写一个需要在 Windows、Mac、Linux、Android、iOS 上运行的库。我已经有了以下定义:
#if defined(_WIN32) || defined(__WIN32__)
// Windows
#define SYSTEM_WINDOWS
#elif defined(linux) || defined(__linux)
// Linux
#define SYSTEM_LINUX
#elif defined(__APPLE__) || defined(MACOSX) || defined(macintosh) || defined(Macintosh)
// MacOS
#define SYSTEM_MACOS
#elif defined(__ANDROID__)
// Android
#define SYSTEM_ANDROID
#else
// Unsupported system
#error This operating system is not supported
#endif
但我不确定要在 iOS 上使用什么。
【问题讨论】:
-
那么 TARGET_OS_IPHONE 可用于任何 iOS 设备?似乎有点太明确了。
-
这里有更详细的描述。 nadeausoftware.com/articles/2012/01/…。 this SO question 还讨论了如何区分版本。
-
@Mike 你似乎并不介意
__ANDROID__用于任何 Android 设备。这有什么不同? -
iPhone 不是操作系统。如果检测 Android 的唯一方法是使用 GALAXY_TAB,我也会质疑其中的逻辑。感谢 Wandering Logic,这是一个很好的链接。
标签: c++ cross-platform c-preprocessor