gcc -fdiagnostics-color在Windows上运行吗?

时间:2016-03-23 05:50:48

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

我使用的是Windows 7,在薄荷(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命令,并且着色确实有效。

我从https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/dongsheng-daily/采购了我的MinGW GCC 5.2,可能是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

1 个答案:

答案 0 :(得分:3)

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

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

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

如果您正在使用预先打包的gcc版本,我猜你会被卡住。

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

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

使用上面的解决方案,“自动”行为默认为“关闭”,你必须使用“始终”开关启用它(这对我来说完全没问题,但我猜对其他人可能不太好。)< / p>