Foreach 在 Makefile 中有两个数组

Foreach with two arrays in a 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 , $(EXT)).h:
    genfile -a $(word , $(CODE)) > $$@

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

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

有没有更好的写法?

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

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

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

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

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

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