Macros for GCC/G++ to differentiate Linux and Mac OSX?
The next time you want to check out pre-defined macros supported by GCC on a platform, run the preprocessor with the flag -dM
. It'll list out all the predefined macros available on the system. For example:
$ 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
...
I use __MACH__
to test for Mac OS X - it's not 100% unique to Mac OS X (there may still be some old NeXT boxes out there !) but it's good enough for telling the difference between Mac and Linux.
I'd be more inclined to test for feature availability than platform name. Try using autoconf.
Otherwise, this is a comprehensive list of platform defines.
Also check out this page for defines regarding compilers, libraries, architectures and devices.
Detect OSX with the __APPLE__
macro if you must. It's better to use configure
to detect features if you can, but not everything works well that way.