J'écris un code multi-plateforme, qui devrait être compilé sous Linux, Windows, Mac OS. Sur Windows, je dois prendre en charge Visual Studio et Mingw.
Il y a quelques morceaux de code spécifique à la plate-forme, que je devrais placer dans #ifdef .. #endif
environnement. Par exemple, ici j'ai placé du code spécifique à win32:
#ifdef WIN32
#include <windows.h>
#endif
Mais comment reconnaître Linux et Mac OS? Quels sont les noms définis (ou etc.) que je devrais utiliser?
Voir: http://predef.sourceforge.net/index.php
Ce projet fournit une liste assez complète de #defines
pour de nombreux systèmes d'exploitation, compilateurs, normes de langage et de plate-forme et bibliothèques standard.
Voici ce que j'utilise:
#ifdef _WIN32 // note the underscore: without it, it's not msdn official!
// Windows (x64 and x86)
#Elif __unix__ // all unices, not all compilers
// Unix
#Elif __linux__
// linux
#Elif __Apple__
// Mac OS, not sure if this is covered by __posix__ and/or __unix__ though...
#endif
EDIT: Bien que ce qui précède puisse fonctionner pour les bases, pensez à vérifier la macro que vous souhaitez vérifier en regardant le Boost.Predef pages de référence . Ou utilisez simplement Boost.Predef directement.
Si vous écrivez en C++, je ne peux pas vous recommander d'utiliser assez fortement les bibliothèques Boost .
La dernière version (1.55) inclut une nouvelle bibliothèque Predef qui couvre exactement ce que vous cherchez , ainsi que des dizaines d'autres macros de reconnaissance de plate-forme et d'architecture.
#include <boost/predef.h>
// ...
#if BOOST_OS_WINDOWS
#Elif BOOST_OS_LINUX
#Elif BOOST_OS_MACOS
#endif