在编译中检测 -mconsole 和 -mwindows

Detecting -mconsole and -mwindows in compilation

这可能是一个简单或愚蠢的问题,但我找不到答案: 是否可以在编译时检查 Windows 上的 GCC 是否使用 -mwindows 或 -mconsole 选项调用?我想将输出定向到标准输出或消息框,具体取决于此选项,例如

#ifdef CONSOLE_BUILD
printf("Hello on stdout");
#elifdef GUI_BUILD
MessageBoxW( NULL, L"Hello on GUI", NULL, MB_OK );
#endif

-mconsole-mwindows 只影响链接器,不影响编译器。每当指定 -mconsole 时,您都可以使用 GCC 规范文件添加 -DCONSOLE_BUILD,但这实际上是自定义 GCC 修改。

作为替代方案,似乎有多种方法可以确定控制台 window 是否与进程相关联,例如 GetConsoleWindow function(但我不是 Windows 程序员).