gpt4 book ai didi

makefile - 在 Makefile $(info ...) 中使用制表符

转载 作者:行者123 更新时间:2023-12-04 01:49:38 27 4
gpt4 key购买 nike

我想专门为 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com