2015-02-27 15 views
5

Używając GNU-make, powiedz, że mam dwie listy w moim pliku Makefile, i chcę je połączyć, aby uzyskać ich Cartesian product jako kolejną listę, dzięki czemu mogę użyj go jako listy celów.Jak uzyskać kartezjański produkt (rozszerzenie kombinatoryczne) list nazw w makefile

Jako przykład z innego języka, który znam lepiej, R has a function expand.grid(), który może to zrobić.

I rzeczywiście zorientowali się sposób to zrobić przy użyciu Makefile:

.PHONY: all 

prefix := 1 2 

base := A B 

add_prefix = $(addsuffix $(base), $(prefix)) 

Obj = $(foreach base, $(base), $(add_prefix)) 

all: 
    @echo $(Obj) 

Ale to dość hacky i nie korzystać z funkcji addsuffix w intuicyjny sposób. Czy istnieje lepszy sposób na zrobienie tego?

Odpowiedz

8

Dlaczego nie zrobić tego po prostu w dwóch pętlach?

obj := $(foreach X,$(prefix),$(foreach Y,$(base),$X$Y)) 
Powiązane problemy