我目前正在尝试显示所有 Makefile 目标来构建一个make help
命令,并且通过执行以下操作使其工作:
help:
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) \
| sed -n "s/^\(.*\): \(.*\)##\(.*\)/$(printf '\033[0;1;31m')\1$(printf '\033[0m') \2 \3/p" \
| column -t -s '##'
正如您在 sed 命令中看到的,我用红色显示第一列(目标名称)。
现在,当我在 shell 中运行此命令时,输出完全正常,颜色显示正常。但是当我运行 时make help
,所有文本都变成白色。
我是否在命令中遗漏了某些内容,或者是否有办法为 Makefile 启用颜色?
答案1
您忘记通过将 部分$
中的符号$(printf...)
加倍为 来转义它们$$
,因此make
会执行该部分本身,并且不会找到扩展。如果您愿意,可以使用$(shell printf '\033[0;1;31m')
让 make 运行该命令。