【问题标题】:Why cargo build can’t offer colorful error messages?为什么 cargo build 不能提供丰富多彩的错误信息?
【发布时间】:2019-10-14 05:56:13
【问题描述】:

在 PowerShell 中,如果我使用“rustc”编译“main.rs”,我可以得到彩色的语法错误消息。

使用“cargo build”,我只能得到 2 个彩色单词“Compiling...”“error...”和单色语法错误消息。

颜色有什么问题?

【问题讨论】:

  • 您的main.rs 是否可以编译为>cargo build 而不是>rustc
  • 重点是,如果编译不成功,就不应该打印成Finished。是错误消息还是警告?如果您在问题中添加屏幕截图可能会更清楚。
  • 是的,你是对的。我得到了另一个丰富多彩的词:红色“错误”。

标签: rust


【解决方案1】:

与许多可以输出颜色的程序一样,rustc 会检测其输出是直接发送到控制台还是重定向到文件。这是因为颜色通常是通过在输出中插入特殊控制字符来生成的,这些字符会污染文件。

cargo 调用rustc 时,它会截取其输出并在最后一口气打印出来,以便它可以并行调用rustc 多次而不会混淆它们的输出。不幸的是,这隐藏了它在rustc 的控制台中运行的事实(因为严格来说它不是:它正在运行到本身在控制台中运行的cargo)。

rustc 有一个命令行参数,即使不在控制台中运行也可以强制着色:--color always。在 Linux 上,cargo 在调用 rustc 时启用此参数,因此错误消息确实有颜色。我怀疑 PowerShell 处理颜色的方式与 Linux 控制台不同,这会阻止它为您工作。您可以通过在调用cargo build 之前将RUSTFLAGS environment variable 设置为--color always 来尝试。

【讨论】:

  • 听从您的建议,我遇到了另一个错误:选项“颜色”给出了不止一次
  • 这意味着cargo 已经正确地提供了它。所以我猜这是 PowerShell 的一个限制。
  • 我明白了。 win7上的PowerShell 5有问题。回到win10,我得到了例外的颜色。感谢您的善意和耐心。
猜你喜欢
  • 2013-01-10
  • 2016-09-02
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2021-08-26
  • 2022-11-24
  • 1970-01-01
相关资源
最近更新 更多