Add initial project structure and files
This commit is contained in:
43
Makefile
Normal file
43
Makefile
Normal file
@@ -0,0 +1,43 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user