给定变量MAX
,如何创建包含整数1到LIST
的变量$(MAX)
?
我的上下文无法使用shell
或类似内容。
答案 0 :(得分:1)
看起来不错,但您不需要$eval
:
seq = $(if $(filter $1,$(words $2)),$2,$(call seq,$1,$2 $(words $2)))
$(error [$(call seq,10)])
或某些人。 Make会在warning: undefined variable '2'
下投诉--warn
,但您可以使用$(value…)
来避免这种情况。
[您可能希望在解决方案BTW中$(filter…)
而不是$(findstring…)
。]
答案 1 :(得分:0)
使用eval
:
UPTO = $(eval TEMP += $(words $(2))) \
$(if $(findstring $(1),$(words $(2))),$(TEMP),$(call UPTO,$(1),$(2) x))
SEQUENCE_TO = $(eval TEMP := )$(strip $(call UPTO,$(1),x))
MAX := 50
LIST := $(call SEQUENCE_TO,$(MAX))
答案 2 :(得分:0)
这是一个简单的递归解决方案,我发现它比$(words ...)
解决方案更容易理解,尽管我猜最终它们并没有那么不同。无论好坏,这肯定更加冗长。
重复调用$(wordlist 2,...)
有点蠢。也许可以避免。
count = $(call count0,$1,0 1 2 3 4 5 6 7 8 9)
count0 = $(if $(wordlist $1,$1,$(wordlist 2,1000000,$2)), \
$(wordlist 1,$1,$(wordlist 2,1000000,$2)), \
$(patsubst 0%,%,$(call count0,$1,$(patsubst %,0%,$2) \
$(patsubst %,1%,$2) $(patsubst %,2%,$2) $(patsubst %,3%,$2) \
$(patsubst %,4%,$2) $(patsubst %,5%,$2) $(patsubst %,6%,$2) \
$(patsubst %,7%,$2) $(patsubst %,8%,$2) $(patsubst %,9%,$2))))
.PHONY: nst
nst:
@echo 7: $(call count,7)
@echo 51: $(call count,51)
@echo 111: $(call count,111)