【发布时间】:2011-02-03 16:35:01
【问题描述】:
用于区分 Linux 和 Mac OSX 的 GCC/G++ 宏?
【问题讨论】:
标签: linux macos gcc cross-platform macros
用于区分 Linux 和 Mac OSX 的 GCC/G++ 宏?
【问题讨论】:
标签: linux macos gcc cross-platform macros
我更倾向于测试功能可用性而不是平台名称。尝试使用autoconf。
否则,这是a comprehensive list of platform defines。
还有check out this page 用于定义编译器、库、架构和设备。
【讨论】:
我使用__MACH__ 来测试 Mac OS X - 它并不是 Mac OS X 100% 独有的(那里可能仍然有一些旧的 NeXT 盒子!)但它足以区分 Mac 和 Linux 之间的区别。
【讨论】:
__APPLE__ ?但即便如此,我也不确定它是否 100% 可靠?
__APPLE__ 和 __MACH__,在我之前的评论中看起来像是 wiki 格式错误。
如果必须,请使用__APPLE__ 宏检测 OSX。如果可以的话,最好使用configure 来检测功能,但并不是所有的东西都可以这样。
【讨论】:
__APPLE__ 这样的编译器定义的宏非常有用,因为您可以在很多时候将代码与构建系统分离。然后,在移植到 Android 或 Chrome NaCl 等深奥的平台时,它会让你的喜欢变得更容易,这些平台不一定适合 ./configure 和朋友
下次您想在平台上检查 GCC 支持的预定义宏时,使用标志 -dM 运行预处理器。它将列出系统上所有可用的预定义宏。例如:
$ touch dummy.hxx
$ cpp -dM ./dummy.hxx
#define __DBL_MIN_EXP__ (-1021)
#define __FLT_MIN__ 1.17549435e-38F
#define __CHAR_BIT__ 8
#define __WCHAR_MAX__ 2147483647
#define __DBL_DENORM_MIN__ 4.9406564584124654e-324
#define __FLT_EVAL_METHOD__ 0
#define __DBL_MIN_10_EXP__ (-307)
#define __FINITE_MATH_ONLY__ 0
#define __SHRT_MAX__ 32767
#define __LDBL_MAX__ 1.18973149535723176502e+4932L
#define __UINTMAX_TYPE__ long unsigned int
#define __linux 1
#define __unix 1
#define __linux__ 1
...
【讨论】:
echo | g++ -dM -E -
-x c++ 以获取用于 C++ 的值。