Foreach在Makefile中有两个数组

时间:2015-02-11 13:03:17

标签: makefile

我必须在两个数组的Makefile中动态构建规则:

  • 文件后缀
  • 代码

我在SO上找到了以下语法,但不幸的是它没有工作

$(foreach (a,b), ($(arrayA),$arrayB), $(eval $(call BUILD_RULES,$(a),$(b)))) 

相反,我发现这个解决方案涉及第三个变量来迭代我的数组:

ITERATE =    1    2    3
EXT     = _FOO _BAR _QUX
CODE    =   34   33   36

define BUILD_RULES
dir/file_a$(word $1, $(EXT)).h:
    genfile -a $(word $1, $(CODE)) > $$@

dir/file_b$(word $1, $(EXT)).h:
    genfile -b $(word $1, $(CODE)) > $$@
endef

$(foreach i, $(ITERATE), $(eval $(call BUILD_RULES,$(i)))) 

有没有更好的方法来写这个?

1 个答案:

答案 0 :(得分:1)

好吧,我不知道它是否更好,但你也可以这样做:

# Initial values
EXT     := _FOO _BAR _QUX
CODE    :=   34   33   36

# Getters
JOINED  := $(join $(addsuffix :,$(EXT)),$(CODE))
GET_EXT  = $(word 1,$(subst :, ,$1))
GET_CODE = $(word 2,$(subst :, ,$1))

define BUILD_RULES
dir/file_a$1.h:
    genfile -a $1 > $$@

dir/file_b$1.h:
    genfile -b $2 > $$@
endef

$(foreach j,$(JOINED),$(eval $(call BUILD_RULES,$(call GET_EXT,$j),$(call GET_CODE,$j))))