如何从预处理器宏中识别平台/编译器?
我正在编写一个跨平台的代码,它应该在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