web-dev-qa-db-fra.com

Des macros pour GCC / G ++ pour différencier Linux et Mac OSX?

Des macros pour GCC/G ++ pour différencier Linux et Mac OSX?

40
Viet

La prochaine fois que vous souhaitez extraire des macros prédéfinies prises en charge par GCC sur une plate-forme, exécutez le préprocesseur avec l'indicateur -dM. Il répertorie toutes les macros prédéfinies disponibles sur le système. Par exemple:

$ 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
...
94
themoondothshine

Je serais plus enclin à tester la disponibilité des fonctionnalités que le nom de la plate-forme. Essayez d'utiliser autoconf .

Sinon, c'est ne liste complète des plates-formes définit .

Aussi consultez cette page pour les définitions concernant les compilateurs, les bibliothèques, les architectures et les périphériques.

12
user23743

Détectez OSX avec le __Apple__ macro si vous devez. Il est préférable d'utiliser configure pour détecter les fonctionnalités si vous le pouvez, mais tout ne fonctionne pas bien de cette façon.

9
Donal Fellows

J'utilise __MACH__ pour tester Mac OS X - ce n'est pas 100% unique à Mac OS X (il peut encore y avoir d'anciennes boîtes NeXT!) mais c'est assez bon pour faire la différence entre Mac et Linux.

4
Paul R