exesrcdir := src
libsrcdir := lib
tmpoutdir := tmp
finoutdir := ../bin

exesrcs := $(notdir $(wildcard $(exesrcdir)/*))
exetmpouts := $(addprefix $(tmpoutdir)/,$(exesrcs))
exefinouts := $(addprefix $(finoutdir)/,$(exesrcs))

build := BUILD_PATH=$(libsrcdir) ./build

.PHONY: all install clean distclean

all: $(exetmpouts)

install: $(exefinouts)

clean:
	rm -f $(exetmpouts)

distclean: clean
	rm -f $(exefinouts)

define buildrule
$(tmpoutdir)/$(1): $(exesrcdir)/$(1) $(shell $(build) deps $(exesrcdir)/$(1))
	$(build) compile $$< $$@
endef

$(foreach exe, $(exesrcs), $(eval $(call buildrule,$(exe))))

$(finoutdir)/%: $(tmpoutdir)/%
	cp $< $@