如何从预处理器宏中识别平台/编译器?

我正在编写一个跨平台的代码,它应该在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编译器,请查看此线程以及其他几种编译器和体系结构。


请参阅: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

编辑:虽然上面可能适用于基础知识,请记住通过查看Boost.Predef参考页来验证要检查的宏。 或者直接使用Boost.Predef。

链接地址: http://www.djcxy.com/p/54583.html

上一篇: How to identify platform/compiler from preprocessor macros?

下一篇: Cross Platform build