Ich schreibe einen plattformübergreifenden Code, der unter Linux, Windows und Mac OS kompiliert werden soll. Unter Windows muss ich Visual Studio und Mingw unterstützen.
Es gibt einige plattformspezifische Codes, die ich in die #ifdef .. #endif
Umgebung einfügen sollte . Zum Beispiel habe ich hier win32-spezifischen Code platziert:
#ifdef WIN32
#include <windows.h>
#endif
Aber wie erkenne ich Linux und Mac OS? Was sind definierte Namen (oder etc.), die ich verwenden soll?
c++
macros
cross-platform
c-preprocessor
Arenim
quelle
quelle
Antworten:
Für Mac OS :
Für MingW unter Windows:
Für Linux :
Überprüfen Sie für andere Windows-Compiler diesen Thread und diesen für mehrere andere Compiler und Architekturen.
quelle
__APPLE__
zu unterscheiden zwischen OSX und iOS?__APPLE__
ist sowohl für OS X als auch für iOS eingestellt. Sie können#include <TargetConditionals.h>
hinein#ifdef __APPLE__
, was Ihnen dann eine gibtTARGET_OS_IPHONE #define
.__MINGW64__
auch zur Verfügung, wenn man benutzt mingw64__MINGW64__
verwiesen wird, ist think_MSC_VER
for Windows / MSVC eine Erwähnung wert (die auch zum Überprüfen der MSVC-Version verwendet werden kann).Siehe: http://predef.sourceforge.net/index.php
Dieses Projekt bietet eine einigermaßen umfassende Liste von Vordefinitionen
#defines
für viele Betriebssysteme, Compiler, Sprach- und Plattformstandards sowie Standardbibliotheken.quelle
Folgendes verwende ich:
BEARBEITEN: Obwohl das oben Gesagte möglicherweise für die Grundlagen funktioniert, sollten Sie auf den Referenzseiten von Boost.Predef überprüfen, nach welchem Makro Sie suchen möchten . Oder verwenden Sie Boost.Predef direkt.
quelle
#if
Frage, falls definiert, die anderen testen auf Wert. Wenn es konsequenter wäre#elif defined(__unix__)
, usw., denke ich.Wenn Sie C ++ schreiben, kann ich die Verwendung von Boost nicht empfehlen Bibliotheken nicht stark genug .
Die neueste Version (1.55) enthält eine neue Predef- Bibliothek, die genau das abdeckt , wonach Sie suchen , sowie Dutzende anderer Makros zur Erkennung von Plattformen und Architekturen.
quelle