如何定义一个变量,它是gmake中整数的顺序列表?

时间:2014-01-07 03:50:59

标签: makefile gnu-make

给定变量MAX,如何创建包含整数1到LIST的变量$(MAX)

我的上下文无法使用shell或类似内容。

3 个答案:

答案 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)