我想为制表文件中的stdout文本专门添加标签。我尝试过将制表符直接放置在文本中以及使用\ t命令,但都无法正常工作。
我总是可以在空格处实现相同的效果,但这很烦人。
$(info test text with tabs)
选项卡在输出中被完全删除
$(info \ttest text)
成为:输出中显示“ \ ttest text”
是否有合理的方法来做到这一点?我知道我可以做到
@echo -e "\tNow the tabs work!"
但是我试图摆脱使用回声。
谢谢
编辑:
我错用空格了-就像插入的制表符一样,空格只会在输出中被删除。
答案 0 :(得分:2)
make在将字符串用作各种命令或语句的参数之前先剥离字符串。因此,让我们首先定义一个不包含任何内容的变量,使用它定义一个包含制表符的变量,并在需要时使用该变量:
$ cat Makefile
NULL :=
TAB := $(NULL)<tab>$(NULL)
all:
$(info X$(TAB)X)
$ make
X X
make: 'all' is up to date.
我使用<tab>
来显示制表符必须去的地方。当然,请使用真实的制表符。请注意,仅NULL
就足以满足您的需求:
$ cat Makefile
NULL :=
all:
$(info $(NULL)<tab>X)
$ make
X
但是拥有一个TAB
变量也许更方便。
还要注意,make变量的名称可能很奇怪。如果您更喜欢命名变量\t
而不是TAB
,则可以:
$ cat Makefile
NULL :=
\t := $(NULL)<tab>$(NULL)
all:
$(info X$(\t)X)
$ make
X X
make: 'all' is up to date.
您甚至可以为行尾定义\n
:
$ cat Makefile
NULL :=
\t := $(NULL)<tab>$(NULL)
define \n
endef
all:
$(info X$(\t)X$(\n)Y$(\t)Y)
$ make
X X
Y Y
make: 'all' is up to date.
在GNU make manual中可以找到在define-endef
中需要两个空行的原因:
普通分配中的值不能包含换行符;但是 分隔定义中值行的换行成为一部分 变量值的值(最后一个换行符除外) endef,不被视为价值的一部分。