如何在 C++ 预处理器中检测 g++ 和 MinGW?
Posted
技术标签:
【中文标题】如何在 C++ 预处理器中检测 g++ 和 MinGW?【英文标题】:How can I detect g++ and MinGW in C++ preprocessor? 【发布时间】:2013-07-03 20:16:19 【问题描述】:我想做这样的事情:
#ifdef GCC
#define GetFunctionName() string("My function name is ") + __PRETTY_FUNCTION__;
#endif
由于我想使用漂亮的 PRETTY_FUNCTION,据我所知,这仅受 gnu 支持,所以我需要检测我是否正在为 g++ 和 MinGW 进行编译,我该怎么做?我猜我只需要知道编译器的预处理器定义,就像我在下面为 Microsoft 所做的那样。
#ifdef WIN32
#define LogFuncBegin() gLogger.FuncBegin( __FUNCTION__ );
#define LogFuncEndSuccess() gLogger.FuncEndSuccess( __FUNCTION__ );
#endif
【问题讨论】:
【参考方案1】:您可以使用:
#ifdef __GNUC__
#ifdef __MINGW32__
对于其他宏,您可能对 this page 感兴趣,它显示了其他编译器宏
【讨论】:
您的测试用例是否包含 MinGW-64? @jww 不,但 MinGW-64 也会定义 32 宏,所以这也适用。 该编译器宏列表的更新版本位于Pre-defined Compiler Macros project at sourceforge【参考方案2】:对于 GCC:
#ifdef __GNUC__
对于 MinGW:
#ifdef __MINGW32__
x86_64-w64-mingw32-gcc 定义了__MINGW32__
和__MINGW64__
。
【讨论】:
您的测试用例是否包含 MinGW-64? 这个答案是在 MinGW-64 之前编写的。但我认为这也定义了__MINGW32__
宏。所以应该仍然有效
这有点争议。我找不到MinGW-64 offered by the project.... 解决不存在的问题毫无意义....
@jww MinGW-w64 是 MinGW 的硬分叉,因为 MinGW 做得不好。现在几乎每个人都使用 MinGW-w64,而不是原来的 MinGW。与 MSYS2 和 MSYS 相同。以上是关于如何在 C++ 预处理器中检测 g++ 和 MinGW?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C 预处理器中可靠地检测 Mac OS X、iOS、Linux、Windows? [复制]
在着色器中访问时,OpenGL如何决定使用MAG_FILTER和MIN_Filter?