如何在Make的$(info)函数中输出前导空白实现缩进打印效果
问题原因
GNU Make 处理内置函数的参数时会自动修剪参数开头的所有空白字符,因此直接写在$(info 后的空格、制表符都会被删除,无法直接输出前导缩进。
可行解决方案
我们可以通过预先定义包含缩进空白的变量,绕过参数的前导空白修剪逻辑,全程仅使用$(info)实现,无额外性能损耗:
- 首先定义保留缩进的变量(可以按需调整空白长度,也可替换为制表符):
# 定义空变量作为占位符,避免缩进空白被Make自动修剪 NULL := # 此处两个NULL中间的内容就是你需要的前导缩进,下面示例为4个空格 INDENT := $(NULL) $(NULL) # 如果需要带前导短横线的缩进,可以这么定义(短横线后接3个空格) INDENT_WITH_DASH := $(NULL) - $(NULL)
- 调用
$(info)时把缩进变量放在内容最前面即可:
# 输出纯缩进的内容 $(info $(INDENT)Is it possible to print me?) # 输出带短横线前缀的缩进内容 $(info $(INDENT_WITH_DASH)Your custom content)
- 实际输出效果完全符合预期:
Is it possible to print me? - Your custom content
该方案全程无额外进程调用,性能和原生$(info)完全一致,远优于调用echo的实现。
内容的提问来源于stack exchange,提问作者alx - recommends codidact
相关产品推荐
相关产品推荐

