# kvstore - A simple key-value store CLI application # Build with: make # Run with: make run # Clean with: make clean # ===== PROJECT CONFIGURATION ===== TARGET = kvstore CC = clang CPPFLAGS = -I include CFLAGS = -Wall -Wextra # ===== LINKER ===== LDFLAGS = LIBS = # ===== DIRECTORIES ===== SRC_DIR = src BUILD_DIR = build BIN_DIR = bin # ===== SOURCE AND OBJECT FILES ===== SRCS = $(wildcard $(SRC_DIR)/*.c) OBJS = $(SRCS:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o) TARGET_PATH = $(BIN_DIR)/$(TARGET) # ===== COMPILATION PATTERN RULE ===== $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c | $(BUILD_DIR) $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ # ===== LINKING RULES ===== $(TARGET_PATH): $(OBJS) | $(BIN_DIR) $(CC) $(LDFLAGS) $(OBJS) $(LIBS) -o $@ # ===== CONVENIENCE TARGETS ===== .PHONY: all clean run all: $(TARGET_PATH) run: $(TARGET_PATH) ./$(TARGET_PATH) clean: rm -f $(BUILD_DIR)/*.o $(TARGET_PATH)