49 lines
963 B
Makefile
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)
|