我必须在两个数组的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))))
有没有更好的方法来写这个?
答案 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))))