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

Print bold or colored text from Makefile rule

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

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

但是,转义序列按原样打印,所以当 运行 make printf-bold-1 时,我得到:

normal text - \e[1mbold text\e[0m

而不是预期的:

normal text - bold text

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

normal text - bold text

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

这里有一些描述我的环境的变量(Linux 使用标准 Gnome 终端),如果有帮助的话:

COLORTERM=gnome-terminal
TERM=xterm-256color

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

根据 Makefile 规则打印粗体或彩色文本的可移植方式是什么?

好的,我明白了。我应该使用 3 而不是 \e\x1b :

printf-bold-1:
    @printf "normal text - 3[1mbold text3[0m"

或者,按照评论中的建议,使用单引号代替双引号:

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

make printf-bold-1 现在生成 :

normal text - bold text

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

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

.PHONY: printf-bold-1

当然,你可以将结果存储到一个Make变量中,以减少子shell的数量:

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

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

.PHONY: printf-bold-1