Linux、Windows、Mac OSでコンパイルするクロスプラットフォームコードを書いています。 Windowsでは、visual studioとmingwをサポートする必要があります。
プラットフォーム固有のコードがいくつかあり、#ifdef .. #endif
環境に配置する必要があります。たとえば、ここにwin32固有のコードを配置しました。
#ifdef WIN32
#include <windows.h>
#endif
しかし、LinuxとMac OSをどのように認識するのでしょうか?定義名(またはその他)とは何ですか?
Mac OSの場合:
#ifdef __Apple__
WindowsのMingWの場合:
#ifdef __MINGW32__
Linuxの場合:
#ifdef __linux__
他のWindowsコンパイラーについては、他のいくつかのコンパイラーおよびアーキテクチャーについて this thread および this を確認してください。
参照: http://predef.sourceforge.net/index.php
このプロジェクトは、多くのオペレーティングシステム、コンパイラ、言語とプラットフォームの標準、および標準ライブラリ用に事前定義された#defines
のかなり包括的なリストを提供します。
私が使用するものは次のとおりです。
#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:上記は基本的には機能する可能性がありますが、 Boost.Predef参照ページ 。または、Boost.Predefを直接使用します。
C++を作成している場合、 Boost ライブラリを十分に強く使用することはお勧めできません。
最新バージョン(1.55)には、新しい Predef ライブラリが含まれています。このライブラリは、 まさに探しているもの に加えて、他の多数のプラットフォームおよびアーキテクチャ認識マクロに対応しています。
#include <boost/predef.h>
// ...
#if BOOST_OS_WINDOWS
#Elif BOOST_OS_LINUX
#Elif BOOST_OS_MACOS
#endif