我想专门为 makefile 中的标准输出文本添加制表符。我试过将制表符直接放入文本中以及使用\t 命令,但都不起作用。
我总能用空格实现同样的效果,但这很烦人。
$(带制表符的信息测试文本)
制表符在输出时被完全移除
$(信息\ttest 文本)
在输出时变成:“\ttest 文本”
有没有合理的方法来做到这一点?我知道我可以这样做
@echo -e "\t现在选项卡可以使用了!"
但是我试图摆脱使用回声。
谢谢
编辑:
我错误地使用了空格——它们只是在输出中被删除,就像插入的制表符一样。
最佳答案
在将字符串用作各种命令或语句的参数之前先去除字符串。所以,让我们首先定义一个包含……什么都没有的变量,用它来定义一个包含选项卡的变量,并在需要时使用该变量:
$ 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.
我们在 define-endef
中需要两个空行的原因可以在 GNU make manual 中找到:
The value in an ordinary assignment cannot contain a newline; but the newlines that separate the lines of the value in a define become part of the variable’s value (except for the final newline which precedes the endef and is not considered part of the value).
关于makefile - 在 Makefile $(info ...) 中使用制表符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53860283/