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))))
我必须从两个数组在 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))))