Created by a human, with a brain badgeA badge with a character next to the text "Web 14," indicating that the site may contain slightly offensive materialDo What The Fuck You Want To Public License badgeTrans flag badgemi toki e Toki Ponamade with MY OWN TWO PAWS badgeNo cookies badgeNo tracking or analytics badgeMade with server-side scripting badgeHosted on home internet badge


Makefile

CXX=g++
LD=ld
INC_PATH=#-Iwhatever
LIB_PATH=#-Lwhatever
CXXFLAGS=-g -Wall -Wextra -O3
LDFLAGS=-lm -lpthread

pc:=%
rwildcard=$(foreach d,$(wildcard $(1:=/*)),$(call rwildcard,$d,$2) $(filter $(subst *,%,$2),$d))

.SUFFIXES:
.PHONY: all
all: program
ifneq ($(MAKECMDGOALS),clean)
include $(call rwildcard,.build,*.d)
endif

program: .build/main.o .build/supporting.o
$(CXX) -B$(LD) -o $@ $(LIB_PATH) $(LDFLAGS) $^

.SECONDEXPANSION: .build/%.o
.build/%.o: $$(patsubst .build/$$(pc).o,$$(pc).cpp,$$@) $$(patsubst $$(pc).o,$$(pc).cpp.d,$$@) | DIR/$$@
$(CXX) $(CXXFLAGS) $(INC_PATH) -I$(dir $<) -c -o $@ $<

.PHONY: clean
clean:
rm -rf .build
rm -f program

.SECONDEXPANSION: .build/%.d
.build/%.d: % | DIR/$$@
@{ printf "%s " $@; $(CXX) -M$(if $(filter g%,$(CXX)),M) $(INC_PATH) -I$(dir $<) $<; } > $@.new
@{ [ ! -f $@ ] || [ -z "$$(cksum $@ $@.new | tr -d .new | uniq -u)" ]; } && mv -f $@.new $@ || rm $@.new

DIR/%:
@[ -d $* ] || mkdir -p $(dir $*)
# https://stackoverflow.com/a/18726681
NOOP/%:
@: