Files
kvstore/Makefile
2025-12-19 07:23:51 -07:00

49 lines
963 B
Makefile

# 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)
# ===== CREATE FOLDERS =====
$(BUILD_DIR) $(BIN_DIR):
mkdir -p $@
# ===== 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)