根据Makefile规则打印粗体或彩色文本

时间:2019-01-04 13:34:36

标签: makefile gnu-make gnome-terminal ansi-colors

我正在尝试从以下Makefile中打印粗体文本:

printf-bold-1:
    @printf "normal text - \e[1mbold text\e[0m"

但是,转义序列按原样打印,因此在运行make printf-bold-1时,我得到了:

  

普通文字-\ e [1mbold text \ e [0m

而不是预期的:

  

普通文本-粗体

这很奇怪,因为我可以在终端上打印粗体文本:直接运行命令printf "normal text - \e[1mbold text\e[0m"会产生预期的结果:

  

普通文本-粗体

Makefile中,我尝试使用@echoecho代替@printf,或者打印\x1b代替\e,但是没有成功。

如果可以,以下是一些描述我的环境的变量(带有标准Gnome终端的Linux):

COLORTERM=gnome-terminal
TERM=xterm-256color

还请注意,在某些同事的笔记本电脑(Mac)上,正确打印了粗体文本。

在每种环境下使用Makefile规则打印粗体或彩色文本的可移植方式是什么?

2 个答案:

答案 0 :(得分:1)

您应该使用常规的tput程序为实际终端生成正确的转义序列,而不是对特定的字符串进行硬编码(例如,在Emacs编译缓冲区中看起来很难看):

printf-bold-1:
    @printf "normal text - `tput bold`bold text`tput sgr0`"

当然,您可以将结果存储在Make变量中,以减少子外壳的数量:

bold := $(shell tput bold)
sgr0 := $(shell tput sgr0)

printf-bold-1:
    @printf 'normal text - $(bold)bold text$(sgr0)'

答案 1 :(得分:0)

好,知道了。我应该使用\033而不是\e\x1b

printf-bold-1:
    @printf "normal text - \033[1mbold text\033[0m"

或者,按照注释中的建议,使用简单的引号而不是双引号:

printf-bold-1:
    @printf 'normal text - \e[1mbold text\e[0m'

make printf-bold-1现在产生:

  

普通文本-粗体