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

标签 makefile

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

相关文章:

makefile - 参数化 Makefile 目标

installation - 'make install' 进入 conda 环境

makefile - 内核驱动程序外部模块未完全构建

makefile - 使用非标准前缀安装glib失败

c - 将参数传递到 ./configure

syntax - Makefile空白语法背后的原因是什么?

linux - gcc 出现错误 libcpp/charset.c(1747) : error: identifier "saved_error_handler" is undefined

可以让 "target"带参数吗?

linux - IAR 的生成文件。源列表

在 Win8/Ubuntu 上编译 Makefile 行为不同?