如何在 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))