如何打印包含文件名列表的变量,每个文件名放在单独的行上?

时间:2018-09-26 08:42:57

标签: makefile gnu

我的makefile中的一个变量包含一长串文件,用空格分隔。我需要仔细查看此列表,但是由于文件名之间用空格隔开,因此操作起来并不容易。因此,我想打印出列表,但每个文件名用新行分隔。

这是我的尝试:

SOME_VARIABLE := I want this to be on separate lines
SOME_VARIABLE_SPLIT := $(subst ' ','\n',$(SOME_VARIABLE))
$(info $(SOME_VARIABLE_SPLIT))

输出:

  

我希望它在单独的行上

如何打印包含以空格分隔的文件名的变量,并且每个文件名都在单独的行上?

1 个答案:

答案 0 :(得分:1)

您的问题出在subst的工作方式上:您的引号和反斜杠实际上是用引号引起的。

一种解决方案是首先定义两个变量,这些变量包含空格和换行符:

# $(NULL) is empty string
NULL  :=
# $(SPACE) is one space
SPACE := $(NULL) $(NULL)
# $(\n) is new line
define \n


endef

,然后在替换中使用它们:

SOME_VARIABLE       := I want this to be on separate lines
SOME_VARIABLE_SPLIT := $(subst $(SPACE),$(\n),$(SOME_VARIABLE))

$(info $(SOME_VARIABLE_SPLIT))

注意:

  • 是的,您需要一个空的NULL变量来定义一个变量,该变量的值是一个空格,
  • 是的,您可以命名一个生成变量\n;对于可读性而言,也许不是最好的事情(读者可能会感到困惑),但仍然足够有趣,无论如何都可以使用它,
  • 是的,您需要在define语句中使用两条换行符,以使末尾仅换行。