单词函数无法正确计算单词数

时间:2015-08-09 06:35:12

标签: makefile

来自docs

  

'$(单词TEXT)'

     

返回TEXT中的单词数。因此,TEXT的最后一个字     是'$(字$(单词TEXT),TEXT)'。

实际上,对于Makefile:

define collection
foo
bar
baz
endef


number := $(words $(collection))


collection:
    echo '$(number) words in my collection'

跑步,我得到:

echo '1 words in my collection'
1 words in my collection

我,有一分钟,我以为我们有三个字。我错了吗?

1 个答案:

答案 0 :(得分:1)

这里的问题是你使用了多行而没有用\明确地结束它们告诉make它们都是同一行的一部分。如果您要使用

定义collection
define collection
foo bar baz
endef

define collecton
foo \
bar \
baz
endef

然后食谱collection将正确输出3 words in my collection。您可能还希望在@命令之前添加echo,因为这会抑制行echo '1 words in my collection' [1]的输出。 @通常在makefile中的行之前使用,当您不希望输出特定命令make时。下面提供了一个makefile,它使用@符号生成您的预期输出。

define collection
foo bar baz
endef

number := $(words $(collection))

collection:
    @echo '$(number) words in my collection'

编辑: @ MadScientist是正确的。这是正常工作的额外空间。但是,如果你要添加像

这样的食谱,我会补充一点
print:
    @echo $collection

除非您使用我在上面提供的2个解决方案中的任何一个,单行声明或使用make: bar: Command not found,否则在每个单词之后正确地为每个单词添加一个空格\。 / p>