c++ - كيفية تحديد منصة/مترجم من وحدات الماكرو preprocessor؟




macros cross-platform (3)

أنا أقوم بكتابة كود عبر النظام الأساسي ، والذي يجب أن يتم تجميعه في linux ، windows ، Mac OS. على النوافذ ، يجب أن أقوم بدعم الاستوديو البصري و mingw.

هناك بعض أجزاء من التعليمات البرمجية الخاصة #ifdef .. #endif الأساسي ، والتي يجب وضعها في #ifdef .. #endif بيئة. على سبيل المثال ، لقد وضعت هنا رمزًا خاصًا بـ win32:

#ifdef WIN32
#include <windows.h>
#endif

ولكن كيف يمكنني التعرف على linux و Mac OS؟ ما الذي يحدد الأسماء (أو غيرها) التي ينبغي علي استخدامها؟


إذا كنت تكتب C ++ ، فلا يمكنني التوصية باستخدام مكتبات Boost بقوة كافية.

يتضمن الإصدار الأحدث (1.55) مكتبة Predef جديدة تغطي ما تبحث عنه بالضبط ، بالإضافة إلى العشرات من وحدات الماكرو الأخرى الخاصة Predef النظام الأساسي والمعماري.

#include <boost/predef.h>

// ...

#if BOOST_OS_WINDOWS

#elif BOOST_OS_LINUX

#elif BOOST_OS_MACOS

#endif

إليك ما أستخدمه:

#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

تحرير: على الرغم من أن ما سبق قد يعمل على الأساسيات ، تذكر أن تتحقق من الماكرو الذي تريد التحقق منه من خلال النظر في الصفحات المرجعية Boost.Predef . أو مجرد استخدام Boost.Predef مباشرة.


لنظام التشغيل Mac :

#ifdef __APPLE__

لـ MingW على نظام Windows:

#ifdef __MINGW32__

لنظام التشغيل Linux :

#ifdef __linux__

لمترجمات Windows الأخرى ، تحقق من هذا الموضوع this لعدة معجبي وأبنية أخرى.





c-preprocessor