I need to build targets with names like,
v1/thread4/foo v1/thread8/foo v1/thread16/foo
v2/thread4/foo v2/thread8/foo v2/thread16/foo
I want
There is no way to have multiple patterns in GNU make.
If your example above is actually reflective of what you want to do, it's simple enough, though:
VLIST := 1 2
TLIST := 4 8 16
TARGETS := $(foreach V,$(VLIST),$(foreach T,$(TLIST),v$V/thread$T/foo))
$(TARGETS): foo.cc $(HEADERS)
$(CXX) $(CXXFLAGS) -DTHREAD=$* -o $@ $< $(LDLIBS)