OUTDIR = public dirname = $(patsubst %/,%,$(dir $(1))) dirnames = $(sort $(call dirname,$(1))) languages = en languages_folders = $(foreach l,$(languages),$(OUTDIR)/$(l)) pages_src = $(filter-out template.html,$(wildcard *.html)) \ $(foreach l,$(languages), \ $(filter-out $(l)/template.html,$(wildcard $(l)/*.html))) pages = $(foreach p,$(pages_src),$(OUTDIR)/$(p)) members_src = $(wildcard *.membre.in \ $(foreach l,$(languages),$(l))/*.membre.in) members_pages = $(patsubst %.membre.in,$(OUTDIR)/%.html,$(members_src)) feeds_src = feed.xml $(foreach l,$(languages), \ $(l)/feed.xml) feeds = $(foreach f,$(feeds_src),$(OUTDIR)/$(f)) images = $(foreach img,$(shell find images -type f),$(OUTDIR)/$(img)) images_folders = $(call dirnames,$(images)) stylesheets = $(foreach img,$(shell find stylesheets -type f),$(OUTDIR)/$(img)) stylesheets_folders = $(call dirnames,$(stylesheets)) scripts = $(foreach img,$(shell find scripts -type f),$(OUTDIR)/$(img)) scripts_folders = $(call dirnames,$(scripts)) .PHONY: all clean site all: site clean: -rm -r $(OUTDIR) site: $(pages) $(members_pages) $(feeds) $(images) $(stylesheets) $(scripts) $(images) $(stylesheets) $(scripts): $(OUTDIR)/%: % cp $< $@ $(feeds): $(OUTDIR)/%: % ./build-feed.sh $< $@ .SECONDEXPANSION: # 🔪 HACK ATTACK 🔪 # Ideally I'd like to just stick $$(