有没有一种简单的方法来对编译器输出进行颜色编码?

Posted

技术标签:

【中文标题】有没有一种简单的方法来对编译器输出进行颜色编码?【英文标题】:Is there an easy way to COLOR-CODE the compiler outputs? 【发布时间】:2013-02-02 02:18:24 【问题描述】:

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

【问题讨论】:

还有***.com/questions/1032237/… ; (也可以试试 clang,颜色自己输出并且有很好的诊断) ***.com/a/49064031/4561887 最近的 GCC 能够显示彩色消息 【参考方案1】:

Debian 和 Ubuntu 为此提供了 colorgcc 软件包。

我通常运行gcc(和make)到emacsM-x compile,然后消息被着色。

附录

GCC 4.9 具有原生着色功能,GCC 6 - 于 2016 年 4 月末发布 -(可能还有 GCC 5)默认启用它(当 stdout 是终端时)。

【讨论】:

为了完整起见,需要在 CFLAGS 中传递 -fdiagnostics-color=always【参考方案2】:

请参阅colorgcc,它是一个 perl 脚本,可用于 gcc 输出。

【讨论】:

【参考方案3】:

如果您正在寻找非常简单的东西,这里有一个替代方案:

#!/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 并确保它是可执行的...

【讨论】:

希望我能投票十多次。也在 Cygwin 中工作。 只是想说这太棒了,就像一个魅力,但是因为它目前输入我收到一个关于“正则表达式中的嵌套量词”的错误,并通过在“+”中添加“\”来修复“g++”,之后效果很好。 “只需将你的 make 别名到这个脚本并确保它是可执行的......”是什么意思?我应该如何使用这个脚本? 我相信他的意思是为你的 bashrc 文件添加一个别名,例如 这样当你输入 将实际运行反而。这个脚本然后调用实际的make。搜索“设置永久别名”了解更多信息。 所有绿色消息的解决方案是@MikeDannyboy 所说的。而不是 g++ 使用 g\+\+ 然后一切都像一个魅力;)【参考方案4】:

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

GilCC 独有; GilCC 具有警告和错误计数器,还显示编译时间,当您尝试改进时非常方便。因为它在 Ruby 中,所以它是跨平台的。它很灵活,您可以添加更多的宝石来自定义它。

下载页面的链接在这里。

https://github.com/gilmotta/GilCC

【讨论】:

【参考方案5】:

Gcc 4.9 seems to have added this feature 通过-fdiagnostics-color 标志:

【讨论】:

【参考方案6】:

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

它也支持来自make 的输出。如果有人需要,我可以为其他工具添加着色模式。

【讨论】:

【参考方案7】:

好的,我也会留下关于我自己的(基于 python 的)工具的通知 :)

它被称为Pluggable Output Processor,它的设计目的不仅是为某个特定程序的输出着色。这是之前的示例 GCC 输出:

后:

【讨论】:

看起来很有趣,但是安装说明在 ubuntu 上不起作用。我尝试了“easy” pip 命令,但由于缺少几个 python 包而失败。其中一些我可以找到作为 ubuntu 包,但不是全部(例如 exitstatus)。在以 root 身份运行 pip 后,它安装了一些东西,但之后我只有 /usr/local/lib/python2.7/dist-packages/outproc 中的东西(安装说明中没有提到任何目录),并且任何地方都没有“bin”目录,任何地方都没有'outproc'二进制文件...... @CarloWood,这是一个 Python 3 包。我刚刚在一个最小的 Ubuntu 16.04 docker 容器中尝试过:apt-get install -y python3-pip,setuptools,wheelpip3 install -U pip,最后是pip install outproc——一切都安装好了,没有问题。 好的,根据这些说明,我可以安装一些东西(假设最后两个命令也必须以 root 身份运行)。但在那之后,我没有/usr/lib/outproc/bin/usr/bin/outproc 你的网页谈到我必须符号链接。因此,我不知道如何测试此安装。我在/usr/local/bin 中找到了一个带有当前日期的“outproc”(所以我假设它刚刚安装),但运行它会出现错误:outproc -m g++ ... File "/usr/local/bin/outproc", line 11, in <module> ... sys.exit(main()) ... 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 @CarloWood,感谢您的耐心,import 错误我已经在 0.18 版中修复,文档would be actualized【参考方案8】:

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

到目前为止,这里至少有 3 个答案提到了colorgcc,但没有一个人解释如何安装它! (这并不明显)。那么,这里是如何在 Ubuntu 中安装最新版本!

    转到here,然后单击“克隆或下载”-->“下载 Zip”。我把它保存到“~/Downloads/Install_Files” 在文件浏览器中导航到它并右键单击它并转到“在此处提取”。我现在有一个名为“~/Downloads/Install_Files/colorgcc-master”的目录。 将“colorgcc.pl”脚本复制到“/usr/bin/colorgcc”以“安装”它(确保根据上面提取的位置使用正确的目录):sudo cp ~/Downloads/Install_Files/colorgcc-master/colorgcc.pl /usr/bin/colorgcc 使其可执行:sudo chmod +x /usr/bin/colorgcc 如果“~/bin”目录不存在,则创建它:mkdir ~/bin *创建指向“/usr/bin/colorgcc”的符号链接,这样无论何时调用gccg++,它都会自动调用colorgccln -s /usr/bin/colorgcc ~/bin/g++ ln -s /usr/bin/colorgcc ~/bin/gcc (如果您出于某种原因想要卸载 colorgcc,只需删除这些符号链接“~/bin/g++”和“~/bin/gcc”,以及 Perl 脚本:“/usr/bin/colorgcc” '完成了) 完成!

当我调用 g++ -Wall -std=c++11 time_until_overflow_2.cpp -o time_until_overflow_2 时,这是一个示例 g++ 输出:

*注意:在“~/bin”中创建这些符号链接仅在“~/bin”位于您的PATH变量中的位置之前实际gcc和@所在的文件夹中有效987654338@ 可执行文件位于。为确保您的路径中有“~/bin”,您可以使用以下命令查看 PATH 变量内容:echo $PATH。如果您在路径的开头没有看到“/home/YOUR_USERNAME/bin”,请添加:export PATH=~/bin:$PATH

参考资料:

查看这里了解更多信息。以及我最初学习大部分这些步骤的地方:https://imranfanaswala.wordpress.com/2009/02/02/setting-up-colorgcc/。谢谢伊姆兰·法纳斯瓦拉!

~GS

【讨论】:

以上是关于有没有一种简单的方法来对编译器输出进行颜色编码?的主要内容,如果未能解决你的问题,请参考以下文章

Android 媒体编解码器(转)

iOS8系统H264视频硬件编解码说明

PWM呼吸灯实验

Base64编码及iOS中的Base64

iOS8系统H264视频硬件编解码说明

简单词法编译器