【问题标题】:Is gcc -fdiagnostics-colour working on Windows?gcc -fdiagnostics-color 在 Windows 上工作吗?
【发布时间】:2016-07-10 07:19:37
【问题描述】:

我使用的是 Windows 7,在 mintty (Cygwin) 和 Windows 命令提示符终端中,MinGW GCC 错误消息没有任何颜色。

$ printenv GCC_COLORS
error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
$ gcc -c -fdiagnostics-color=always file.cpp -o file.o

对于两个终端,当我使用 git 命令时,我可以看到颜色,所以终端本身很好。我可以在没有 GCC_COLORS 环境变量的情况下在 Ubuntu Linux (GCC 4.9) 中使用相同的 GCC 命令,并且着色确实有效。

我的 MinGW GCC 5.2 来自 https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/dongsheng-daily/,可能是 gcc-5-win32(稳定版)。

gcc -v 给出:

Target: i686-w64-mingw32
Configured with: /home/drangon/work/mingw-w64-dgn_32/source/gcc-5.2.0/configure --host=i686-w64-mingw32 --target=i686-w64-mingw32 --disable-nls --enable-languages=c,c++,objc,obj-c++ --with-gmp=/home/drangon/work/mingw-w64-dgn_32/build/for_target --with-mpfr=/home/drangon/work/mingw-w64-dgn_32/build/for_target --with-mpc=/home/drangon/work/mingw-w64-dgn_32/build/for_target --with-isl=/home/drangon/work/mingw-w64-dgn_32/build/for_target --enable-twoprocess --disable-libstdcxx-pch --disable-win32-registry --prefix=/home/drangon/work/mingw-w64-dgn_32/target --with-sysroot=/home/drangon/work/mingw-w64-dgn_32/target
Thread model: win32
gcc version 5.2.0 (GCC)

我看到这张关于这个问题的票已关闭,因为它正在为某人工作。 https://sourceforge.net/p/mingw-w64/feature-requests/66/

如何使错误着色起作用?

(我确实尝试了 gcc-5-win64,它也有同样的问题......而且 clang -fcolor-diagnostics 也失败了,Clang 3.7.1 来自:http://llvm.org/releases/download.html#3.7.1

【问题讨论】:

  • 这对我有用 Cygwin mingw64-x86_64-gcc-core 包 4.9.2
  • colorgcc 怎么样? github.com/colorgcc/colorgcc 这是一个 perl 脚本,用于对 gcc 的输出进行着色,如果配置正确,它将起作用!屏幕截图:i.imgur.com/V2U2L4a.png 我使用 [gcc] 作为 [colorgcc] 的链接(cmd 中的 mklink),以使其与 [gcc] 命令一起使用。使用 TDM-GCC 5.1 和 Perl 5.22。
  • 我记得不久前听说过 colorgcc,但从未尝试过。我可能会这样做。不过,让官方的内置着色工作会很好(这也更令人赏心悦目)。与 Clang 着色相同。
  • 我发现使用 gcc 6.3.0 在 MSYS2/gcc 下构建 gcc 会产生一个可以使用 diagnostics-color 的版本,但在 mingw-w64 下构建则不行

标签: c++ windows gcc compiler-errors clang


【解决方案1】:

在 gcc 6.3.0 的源代码中diagnostic-color.c 出现:

#if (defined _WIN32)
bool
colorize_init (diagnostic_color_rule_t)
{
  return false;
}
#else

其次才是真正的逻辑。要解决此问题,如果您自己构建 gcc,请将第一行更改为 #if 0。这对我有用,使用 MSYS2 作为外壳在 mingw-w64 5.2.0(32 位)下构建 gcc-6.3.0。

如果你使用的是 gcc 的预打包版本,我猜你会卡住。


A gcc bug has been filed 回复(意译)“当前 gcc 开发人员中没有人使用 Windows,为了解决这个问题,使用 Windows 的人需要完成补丁提交过程”。

在错误报告线程上,链接了一个第三方补丁,它尝试使用 Win32 系统调用来实现 auto 行为以检测 shell 功能。

使用我上面的解决方案,“自动”行为默认为“关闭”,您必须使用“始终”开关启用它(这对我来说非常好,但我想对其他人来说可能不太好)。

【讨论】:

    猜你喜欢
    • 2018-06-23
    • 1970-01-01
    • 2018-05-24
    • 2021-11-26
    • 2019-02-09
    • 2021-12-02
    • 1970-01-01
    • 2011-09-11
    • 2016-01-02
    相关资源
    最近更新 更多