2015-02-27 27 views
5

Utilizzando GNU-make, dire che ho due elenchi nel mio Makefile e voglio combinarli per ottenere il loro Cartesian product come un altro elenco, in modo che io possa usalo come elenco di obiettivi.Come ottenere il prodotto cartesiano (espansione combinatoria) degli elenchi di nomi nel makefile

Come esempio da una lingua diversa che conosco meglio, R has a function expand.grid() che potrebbe ottenere ciò.

in realtà ho trovato un modo per fare questo si utilizza un Makefile:

.PHONY: all 

prefix := 1 2 

base := A B 

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

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

all: 
    @echo $(Obj) 

Ma, questo è abbastanza hacky e non usa la funzione addsuffix in modo intuitivo. C'è un modo migliore per farlo?

risposta

8

Perché non farlo in due cicli?

obj := $(foreach X,$(prefix),$(foreach Y,$(base),$X$Y))