Est-ce que gcc -fdiagnostics-color fonctionne sous Windows?

J’utilise Windows 7 et dans les deux terminaux Invite de commande (Cygwin) et Windows, je n’ai aucune couleur pour les messages d’erreur 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 

Pour les deux terminaux, je peux voir la couleur lorsque j’utilise les commandes git, donc les terminaux sont bien eux-mêmes. Je peux utiliser la même commande GCC dans Ubuntu Linux (GCC 4.9) sans la variable d’environnement GCC_COLORS et la coloration fonctionne.

J’ai trouvé mon MinGW GCC 5.2 sur https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/dongsheng-daily/ , probablement le gcc-5-win32 (stable).

gcc -v donne:

 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) 

J’ai vu ce billet à propos de ce problème était fermé parce que cela fonctionnait pour quelqu’un. https://sourceforge.net/p/mingw-w64/feature-requests/66/

Comment puis-je obtenir la coloration d’erreur?

(J’ai essayé le gcc-5-win64, qui a le même problème … et les clang -fcolor-diagnostics échouent, avec Clang 3.7.1 provenant de: http://llvm.org/releases/download.html# 3.7.1 )

Dans le code source de gcc diagnostic-color.c , le diagnostic-color.c apparaît:

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

suivi de la vraie logique. Pour corriger cela, si vous construisez vous-même gcc, changez la première ligne en #if 0 . Cela a fonctionné pour moi, en construisant gcc-6.3.0 sous mingw-w64 5.2.0 (32 bits) en utilisant MSYS2 comme un shell.

Si vous utilisez une version pré-packagée de gcc, je suppose que vous êtes bloqué.


Un bogue gcc a été classé avec la réponse que (paraphrasée) “personne parmi les développeurs gcc actuels n’utilise Windows, et pour résoudre ce problème, une personne utilisant Windows doit passer par le processus de soumission de correctif”.

Sur le thread de rapport de bogue, il existe un correctif tiers lié qui tente d’implémenter le comportement auto l’aide d’appels système Win32 pour détecter les capacités du shell.

En utilisant ma solution ci-dessus, le comportement “auto” est “désactivé” par défaut et vous devez l’activer avec le commutateur “toujours” (ce qui me convient parfaitement, mais je suppose que cela ne convient pas aux autres).