GNU/Linux >> Tutoriels Linux >  >> Linux

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

La prochaine fois que vous souhaitez vérifier les macros prédéfinies prises en charge par GCC sur une plate-forme, exécutez le préprocesseur avec le drapeau -dM . Il listera 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
...

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

Sinon, il s'agit d'une liste complète des définitions de plate-forme.

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


Détecter OSX avec le __APPLE__ macro si vous le devez. Il vaut mieux utiliser configure pour détecter les fonctionnalités si vous le pouvez, mais tout ne fonctionne pas bien de cette façon.


J'utilise __MACH__ pour tester Mac OS X - ce n'est pas 100% unique à Mac OS X (il y a peut-être encore quelques vieilles boîtes NeXT là-bas !) Mais c'est assez bon pour faire la différence entre Mac et Linux.


Linux
  1. Linuxbrew - Un gestionnaire de packages commun pour Linux et Mac OS X

  2. Hitman The Complete First Season pour Linux et Mac maintenant disponible

  3. Golang Mac OSX construit pour la machine Docker

  4. Qu'est-ce qu'une alternative XPerf pour Linux et Mac OS X ?

  5. À quoi ressemble le pbcopy d'OSX pour Linux

10 tutoriels de commande Linux pour débutants et experts

Top 10 des distributions Linux pour ordinateur portable et de bureau

Comment effacer l'historique de Bash sous Linux et Mac

Compilateur croisé pour Linux sur Mac OS X ?

Différentes déclarations de qsort_r sur Mac et Linux

Impression recto-verso manuelle pour Mac (et/ou Linux)