来自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
我,有一分钟,我以为我们有三个字。我错了吗?
答案 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>