BUILD_DIR := build SRC_DIR := src INCLUDE_DIR := include PRIVATE_INCLUDE_DIR := privinclude CC := clang CFLAGS := -I $(INCLUDE_DIR) -I $(PRIVATE_INCLUDE_DIR) -Wall -Wextra CFLAGS_DBG := $(CFLAGS) -g -O0 CFLAGS_REL := $(CFLAGS) -O2 LDFLAGS := LDFLAGS_REL := $(LDFLAGS) -s APPLICATION := bbirc APPLICATION_DBG := bbirc-debug $(shell mkdir -p $(BUILD_DIR)) SRCS := $(wildcard $(SRC_DIR)/*.c) DBG_OBJS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/dbg_%.o,$(SRCS)) REL_OBJS := $(patsubst $(SRC_DIR)/%.c,$(BUILD_DIR)/rel_%.o,$(SRCS)) .PHONY: all debug release clean all: release debug: $(APPLICATION_DBG) release: $(APPLICATION) both: debug release $(APPLICATION): $(REL_OBJS) $(CC) -o $@ $^ $(LDFLAGS_REL) $(APPLICATION_DBG): $(DBG_OBJS) $(CC) -o $@ $^ $(LDFLAGS) $(BUILD_DIR)/dbg_%.o: $(SRC_DIR)/%.c $(CC) -c -o $@ $^ $(CFLAGS_DBG) $(BUILD_DIR)/rel_%.o: $(SRC_DIR)/%.c $(CC) -c -o $@ $^ $(CFLAGS_REL) clean: rm -rf $(BUILD_DIR) rm -rf $(APPLICATION) rm -rf $(APPLICATION_DBG)