CC := gcc AR := ar 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 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) NAME := kociemba all: standalone lib standalone $(NAME): $(BIND)/$(NAME) static $(NAME).a: $(BIND)/$(NAME).a clean: rm -rf $(OBJD) rm -rf $(BIND) $(OBJD)/%.o: $(SRCD)/%.c @mkdir -p $(dir $@) $(CC) $(CFLAGS) -MMD -MF $(@:%.o=%.d) -c $< -o $@ $(BIND)/$(NAME): $(COBJS) @mkdir -p $(dir $@) $(CC) $(CFLAGS) $^ -o $@ $(BIND)/$(NAME).a: $(COBJS) @mkdir -p $(dir $@) $(AR) rsc $@ $^ .PHONY: all standalone lib clean $(NAME) $(NAME).a