如何将语法突出显示添加到 make 错误消息中?

How can I add syntax highlighting to a make error message?

总结

我想在错误消息中手动添加特定单词的语法突出显示。我尝试使用到 awk 的管道,但这似乎不适用于 make 抛出的整个消息。任何人都可以帮助我让以下管道为 make 的整个错误消息工作吗?

make | awk '{for(i=1;i<=NF;i++){ if($i~/error/ || $i~/Built/) $i=sprintf("3[0;36m %s 3[0;00m",$i)}; print}'

或者也许——更好的是——对我的

采取不同的方法

情况(详细)

为了构建我的 Latex 项目,我将 Cmake 与 UseLATEX (github page) 结合使用。这样,我可以通过从构建文件夹中执行 make 来简单地呈现我的文档。唯一的问题:错误消息的文本墙没有语法高亮显示。我需要添加这个的最小版本,以高效地工作。 (也许可以在我的终端中全局突出显示单词?)

通过将管道中的输出传递给 awkmanpage)—inspired by this askubuntu post——我能够突出显示 make 的成功消息,pdflatex myfile.tex 的成功 和error信息,但是不是make的错误信息,它没有突出长信息中有趣的部分。

通过在上面的代码片段中突出显示 Built,可以看到它确实在第一个命令 make 成功时突出显示。

问题是我不完全明白管道什么时候经过什么。似乎有些输出可以高亮显示有些不能。

感谢您的帮助!

重现所需的步骤

准确地了解手头的情况,您需要一个包含

的项目文件夹
build/
cmake/
myfile.tex
CMakeLists.txt

cmake/ 包含 UseLATEX.cmakeCMakeLists.txt 阅读

include(cmake/UseLATEX.cmake)

ADD_LATEX_DOCUMENT(myfile.tex)

myfile.tex 是有效或无效的乳胶文档,例如

\documentclass{article}
  \begin{document}
    Some \undefined command
  \end{document}

build/ 文件夹中,调用 cmake ..,然后调用 make,或者更确切地说是上面的完整命令。

消息写在 stderr 上,而不是 stdout 上。你必须处理标准错误。在bash中,您可以:

make 2> >(do_something_with_stderr >&2) | do_something_with_stdout

因为 | 改变了缓冲,在交互式程序中并不总是需要它。对于互动,我更喜欢:

make 2> >(do_something_with_stderr >&2) >(do_something_with_stdout)

有时这是一个功能:

some_func() { do_something; }
make 2> >(some_func >&2) >(some_func)