rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2)) SOURCES := $(call rwildcard,src/,*.c) HEADERS := $(call rwildcard,src/,*.h) OBJECTS := $(patsubst src/%.c,build/%.o,$(SOURCES)) DEPS := $(patsubst build/%.o,build/%.d,$(OBJECTS)) PREFIX = /usr/local CFLAGS = $(if $(DEBUGA),-DDEBUG=1,) -Wall $(if $(ASAN),-fsanitize=address,) -fno-PIE -no-pie -std=gnu11 $(if $(DEBUG),-O0 -g,-Os -s) -fms-extensions -Isrc -Wno-array-bounds -MMD -MP -flto .PHONY: install clean build/%.o: src/%.c cc -c $(CFLAGS) -o $@ $< ntc: $(OBJECTS) cc $(CFLAGS) -o ntc $(OBJECTS) install: ntc mv ./ntc $(PREFIX)/bin clean: rm ./ntc -include $(DEPS)