CC := gcc ifeq ($(PROD),1) CFLAGS := -std=c99 -O2 # production flags else CFLAGS := -std=c99 -Wall -Wextra -Wpedantic -g -DDEBUG # debug flags endif SRCD := src OBJD := obj BIND := bin TESTD := tests FILES = $(shell find $(SRCD)/ -type f 2> /dev/null) CSRCS = $(filter %.c, $(FILES)) COBJS = $(CSRCS:$(SRCD)/%.c=$(OBJD)/%.o) CDEPS = $(COBJS:%.o=%.d) -include $(CDEPS) .PHONY: all clean lispy all: lispy lispy: $(BIND)/lispy clean: rm -rf $(BIND) rm -rf $(OBJD) $(OBJD)/%.o: $(SRCD)/%.c mkdir -p $(dir $@) $(CC) $(CFLAGS) -MMD -MF $(@:%.o=%.d) -c $< -o $@ $(BIND)/%: $(COBJS) mkdir -p $(dir $@) $(CC) $(CFLAGS) $^ -o $@ analyze: clean scan-build \ -enable-checker alpha \ -enable-checker core \ -enable-checker deadcode \ -enable-checker security \ -enable-checker unix \ make leak: lispy valgrind -s --leak-check=full $(BIND)/lispy