J'écris un code multiplateforme, qui devrait être compilé sous Linux, Windows, Mac OS. Sous Windows, je dois prendre en charge Visual Studio et mingw.
Il y a quelques morceaux de code spécifiques à la plate-forme, que je devrais placer dans l' #ifdef .. #endif
environnement. Par exemple, j'ai placé ici un code spécifique à win32:
#ifdef WIN32
#include <windows.h>
#endif
Mais comment reconnaître Linux et Mac OS? Quels sont les noms de définition (ou etc.) que je devrais utiliser?
Réponses:
Pour Mac OS :
Pour MingW sous Windows:
Pour Linux :
Pour les autres compilateurs Windows, vérifiez ce fil et ceci pour plusieurs autres compilateurs et architectures.
la source
__APPLE__
distinction entre OSX et iOS?__APPLE__
est défini pour OS X et iOS. Vous pouvez à l'#include <TargetConditionals.h>
intérieur#ifdef __APPLE__
, ce qui vous donne alors unTARGET_OS_IPHONE #define
.__MINGW64__
est également disponible quand on utilise mingw64__MINGW64__
est référencé, think_MSC_VER
for Windows / MSVC mérite une mention (qui peut également être utilisé pour vérifier la version MSVC).Voir: http://predef.sourceforge.net/index.php
Ce projet fournit une liste raisonnablement complète des éléments prédéfinis
#defines
pour de nombreux systèmes d'exploitation, compilateurs, normes de langage et de plate-forme et bibliothèques standard.la source
Voici ce que j'utilise:
EDIT: Bien que ce qui précède puisse fonctionner pour les bases, n'oubliez pas de vérifier quelle macro vous souhaitez vérifier en consultant les pages de référence Boost.Predef . Ou utilisez simplement Boost.Predef directement.
la source
#if
demandent si définis, les autres testent la valeur. Si ce serait plus cohérent à faire#elif defined(__unix__)
, etc., je pense.Si vous écrivez en C ++, je ne saurais trop vous recommander d'utiliser les bibliothèques Boost .
La dernière version (1.55) comprend une nouvelle bibliothèque Predef qui couvre exactement ce que vous recherchez , ainsi que des dizaines d'autres macros de reconnaissance de plate-forme et d'architecture.
la source