112 votes

Comment identifier le compilateur/plate-forme de macros préprocesseur ?

Je vous écris un code multi-plateforme, qui devrait compiler linux, windows, mac os. Sous windows, je dois soutenir mingw et visual studio.

Il y a quelques morceaux de code spécifique à la plateforme, qui je devrais placer dans #ifdef... #endif enviroment. Par exemple, ici, j’ai placé un code spécifique win32 :

Mais comment reconnaître les os linux et mac OS ? Qu’entend-on par définit les noms (ou etc) je devrais utiliser ?

131voto

karlphillip Points 46502

Pour Mac OS:

#ifdef __APPLE__

Pour MingW sous Windows:

#ifdef __MINGW32__

Pour Linux:

#ifdef __linux__

Pour les autres compilateurs pour Windows, vérifiez ce fil et ce pour plusieurs autres compilateurs et des architectures.

59voto

John Bartholomew Points 3712

Voir : http://predef.sourceforge.net/index.php

Ce projet fournit une liste assez exhaustive des prédéfinis `` pour nombreux systèmes d’exploitation, compilateurs, normes linguistiques et de la plate-forme et les bibliothèques standard.

46voto

rubenvb Points 27271

Voici ce que j’utilise :

EDIT : Bien que ce qui précède pourrait fonctionner pour les bases, n’oubliez pas de vérifier ce macro que vous souhaitez vérifier en regardant les pages de référence de Boost.Predef. Ou il suffit d’utiliser Boost.Predef directement.

20voto

rvalue Points 945

Si vous êtes à la rédaction de C++, je ne peux pas vous recommandons d'utiliser le Boost des bibliothèques assez fortement.

La dernière version (1.55) inclut un nouveau Predef bibliothèque qui couvre exactement ce que vous cherchez, avec des dizaines d'autres plate-forme et l'architecture de la reconnaissance des macros.

#include <boost/predef.h>

// ...

#if defined(BOOST_OS_WINDOWS)

#elif defined(BOOST_OS_LINUX)

#elif defined(BOOST_OS_MACOS)

#endif

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X