如何在 makefile 中获取名称列表的笛卡尔积(组合展开)
How to get Cartesian product (combinatorial expansion) of name lists in makefile
使用 GNU-make,假设我的 Makefile 中有两个列表,我想将它们组合起来以获得它们的 Cartesian product 作为另一个列表,这样我就可以将它用作目标列表。
作为我更了解的另一种语言的示例,R has a function expand.grid() 可以实现这一点。
我实际上找到了一种使用 Makefile 来完成此操作的方法:
.PHONY: all
prefix := 1 2
base := A B
add_prefix = $(addsuffix $(base), $(prefix))
Obj = $(foreach base, $(base), $(add_prefix))
all:
@echo $(Obj)
但是,这很老套,并且没有以直观的方式使用 addsuffix 函数。有更好的方法吗?
为什么不分两次循环呢?
obj := $(foreach X,$(prefix),$(foreach Y,$(base),$X$Y))
使用 GNU-make,假设我的 Makefile 中有两个列表,我想将它们组合起来以获得它们的 Cartesian product 作为另一个列表,这样我就可以将它用作目标列表。
作为我更了解的另一种语言的示例,R has a function expand.grid() 可以实现这一点。
我实际上找到了一种使用 Makefile 来完成此操作的方法:
.PHONY: all
prefix := 1 2
base := A B
add_prefix = $(addsuffix $(base), $(prefix))
Obj = $(foreach base, $(base), $(add_prefix))
all:
@echo $(Obj)
但是,这很老套,并且没有以直观的方式使用 addsuffix 函数。有更好的方法吗?
为什么不分两次循环呢?
obj := $(foreach X,$(prefix),$(foreach Y,$(base),$X$Y))