test_source_files := fail=.cxx test_bins := $(basename $(test_source_files)) all: $(test_bins) define test_recipe = $(CXX) -o $(@) $(<) endef define test_rule = $(1): $(addsuffix .cxx,$(1)); $$(test_recipe) endef $(foreach test_bin,$(test_bins),$(eval $(call test_rule,$(test_bin)))) .PHONY: all