有没有简单的方法给编译器输出着色?

43

gcc(或其他编译器)通常会生成大量的文本输出,很难看到错误在哪里或忽略警告。我搜索了一些东西,但没有找到一个干净简单的解决方案来对编译器输出进行颜色编码(例如,警告为黄色,错误为红色等)。

gcc(或其他编译器)经常会生成大量文本输出和警告,需要对其进行颜色编码以便更好地查找和解决问题。


2
另外,https://dev59.com/O0jSa4cB1Zd3GeqPCh_0;(也可以尝试使用clang,它可以自动输出彩色信息并具有出色的诊断功能)。 - Mat
https://dev59.com/R2Up5IYBdhLWcg3w8bJB#49064031 - Gabriel Staples
近期的GCC能够输出彩色信息。 - Basile Starynkevitch
8个回答


26

如果你正在寻找非常简单的替代方案,这里有一个选择:

#!/bin/bash -e

make ${@} 2>&1 | perl -wln -M'Term::ANSIColor' -e '
m/Building|gcc|g++|\bCC\b|\bcc\b/ and print "\e[1;32m", "$_", "\e[0m"
or
m/Error/i and print "\e[1;91m", "$_", "\e[0m"
or
m/Warning/i and print "\e[1;93m", "$_", "\e[0m"
or
m/Linking|\.a\b/ and print "\e[1;36m", "$_", "\e[0m"
or
print; '

只需将您的 make 命名为此脚本的别名,并确保它是可执行的...


2
希望我能点赞十几次。在Cygwin中也可以工作。 - Mark K Cowan
3
我很高兴听到您的好评,这个东西非常棒,而且效果非常好。不过,由于当前的输入方式,我遇到了一个关于“正则表达式中嵌套量词”的错误,我通过在“g++”中添加“\”来修复了这个问题,之后它运行得非常好。 - Mike Dannyboy
1
我相信他的意思是在你的bashrc文件中添加一个别名,例如<alias make='make-thisscript'>,这样当你输入<make>时,实际上会运行<make-thisscript>。然后这个脚本调用实际的make命令。搜索“设置永久别名”以获取更多信息。 - Kurt E. Clothier
对我来说,错误信息、警告和成功编译都是绿色的。有人知道为什么吗? - narengi
1
所有绿色消息的解决方案是@MikeDannyboy所说的。不要使用g++,而是使用g++,然后一切都像魔术般地运行;) - theme
显示剩余4条评论

15

Debian和Ubuntu提供了colorgcc包来实现这个目的。

我通常通过emacsM-x compile命令来运行gcc(和make),然后消息会被着色。

附加说明

GCC 4.9有本地着色功能,GCC 6 -在2016年4月底发布- (可能GCC 5也是)默认启用该功能(当stdout是终端时)。


4
为了完整起见,在 CFLAGS 中需要传递 -fdiagnostics-color=always,以启用诊断信息的彩色显示。 - Pouya

14

好的,我会留一个关于我自己(基于Python的)工具的通知 :)

它叫做Pluggable Output Processor,不仅设计用于某个特定程序的输出着色。下面是GCC输出的示例:

Pluggable Output Processor Before 之后: Pluggable Output Processor Before


1
看起来很有趣,但是安装说明在Ubuntu上无法正常工作。我尝试了“简单”的pip命令,但由于缺少几个Python包而失败。其中一些我可以找到Ubuntu软件包,但不是全部(例如exitstatus)。在以root身份运行pip之后,它安装了一些东西,但之后我只在/usr/local/lib/python2.7/dist-packages/outproc中发现了一些内容(没有任何安装说明提到的目录),而且没有任何'bin'目录,也没有任何'outproc'二进制文件... - Carlo Wood
@CarloWood,这是一个Python 3包。我刚刚尝试在最小的Ubuntu 16.04 docker容器中安装:apt-get install -y python3-{pip,setuptools,wheel}pip3 install -U pip,最后 pip install outproc--一切都成功安装。 - zaufi
好的,根据这些指令,我可以安装一些东西(假设最后两个命令也必须以root身份运行)。但是在此之后,我没有/usr/lib/outproc/bin/usr/bin/outproc,你的网页上提到了我必须使用软链接。因此,我不知道如何测试这个安装。我在/usr/local/bin中找到了一个带有当前日期的“outproc”(所以我认为它刚刚被安装了),但运行它会出现错误:outproc -m g++ ... File "/usr/local/bin/outproc",第11行,在<module>...sys.exit(main())... - Carlo Wood
File "/usr/local/lib/python3.5/dist-packages/outproc/cli.py", line 236, in main ... return a.run() ... File "/usr/local/lib/python3.5/dist-packages/outproc/cli.py", line 182, in run ... log.eerror('Pipe mode not implemented') ... File "/usr/local/lib/python3.5/dist-packages/outproc/logger.py", line 33, in eerror ... print(' \x1b[0;31;1m*\x1b[0m {}'.format(msg), file=sys.stderr) ... NameError: name 'sys' is not defined - Carlo Wood
@CarloWood,感谢您的耐心等待,import错误已在版本0.18中修复,文档将会被更新。链接 - zaufi

11

请查看colorgcc,这是一个能够给gcc输出上色的Perl脚本。


1

如何安装和使用colorgcc为您的gcc编译器输出着色:

到目前为止,至少有3个答案提到了colorgcc,但是它们都没有解释如何安装它!(而且这并不明显)。因此,以下是在Ubuntu中安装最新版本的方法!

  1. 前往这里,点击“Clone or download” --> “Download Zip”。我将其保存在“~/Downloads/Install_Files”目录下。
  2. 在文件浏览器中导航到该目录,右键单击它并选择“Extract Here”。现在我有一个名为“~/Downloads/Install_Files/colorgcc-master”的目录。
  3. 将“colorgcc.pl”脚本复制到“/usr/bin/colorgcc”以“安装”它(根据上面提取的位置使用正确的目录):sudo cp ~/Downloads/Install_Files/colorgcc-master/colorgcc.pl /usr/bin/colorgcc
  4. 使其可执行:sudo chmod +x /usr/bin/colorgcc
  5. 如果“~/bin”目录不存在,则创建它:mkdir ~/bin
  6. *创建符号链接,指向“/usr/bin/colorgcc”,以便每当您调用gccg++时,它会自动调用colorgcc
    • ln -s /usr/bin/colorgcc ~/bin/g++
    • ln -s /usr/bin/colorgcc ~/bin/gcc
    • (如果您因某种原因想要卸载colorgcc,请删除这些符号链接“~/bin/g++”和“~/bin/gcc”,以及Perl脚本:“/usr/bin/colorgcc”,然后完成操作)
  7. 完成!

现在我调用g++ -Wall -std=c++11 time_until_overflow_2.cpp -o time_until_overflow_2,以下是一个示例g++输出:

enter image description here

*注意:只有在“〜/bin”处创建这些符号链接才能正常工作,前提是“〜/bin”在实际的gccg ++可执行文件所在的文件夹之前。要确保在路径中有“〜/bin”,您可以使用以下命令查看PATH变量内容:echo $PATH。如果您在路径开头看不到“/home/YOUR_USERNAME/bin”,请使用以下命令添加它:export PATH=~/bin:$PATH

参考资料:

了解更多信息并了解我最初学习这些步骤的地方,请参见此处:https://imranfanaswala.wordpress.com/2009/02/02/setting-up-colorgcc/。感谢Imran Fanaswala!

GS


0

虽然GCC 4.9有-fdiagnostics-color选项可以启用终端的彩色输出,但我创建了一个名为'crror'的小工具来获得带颜色的编译器输出。

它还支持make的输出。如果有人需要,我可以添加其他工具的颜色模式。


0

你可以使用GilCC,这是一个Ruby工具,可以实时将GCC输出转换为彩色。现在你有两个选择:Perl脚本(colorGCC)或GilCC,如果你已经在使用Ruby,你会喜欢GilCC。

GilCC独有的功能是它有警告和错误计数器,并且显示编译时间,在你尝试改进东西时非常方便。因为它是用Ruby编写的,所以它是跨平台的。它很灵活,你可以添加更多的gems来自定义它。

下载页面链接在这里。

https://github.com/gilmotta/GilCC


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接