# Makefile for Roguelike Game # Requires raylib, pkg-config CC := cc CFLAGS := -Wall -Wextra -O2 -std=c99 -Isrc LDFLAGS := -lraylib -lm -lpthread -ldl -lrt TARGET := roguelike SRCDIR := src OBJDIR := obj SOURCES := $(wildcard $(SRCDIR)/*.c) OBJECTS := $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SOURCES)) .PHONY: all clean format format-check all: $(TARGET) $(TARGET): $(OBJECTS) $(CC) $^ -o $@ $(LDFLAGS) $(OBJDIR)/%.o: $(SRCDIR)/%.c @mkdir -p $(dir $@) $(CC) $(CFLAGS) -c $< -o $@ clean: rm -rf $(OBJDIR) $(TARGET) # Alias for development dev: all ./$(TARGET) # Format all source files with clang-format fmt: @command -v clang-format >/dev/null 2>&1 || { echo "Error: clang-format is missing"; exit 1; } @echo "Formatting source files..." @clang-format -i $(SOURCES) $(wildcard $(SRCDIR)/*.h) @echo "Done formatting." # Check formatting without modifying files fmt-check: @command -v clang-format >/dev/null 2>&1 || { echo "Error: clang-format is missing"; exit 1; } @echo "Checking formatting..." @clang-format --dry-run --Werror \ $(SOURCES) $(wildcard $(SRCDIR)/*.h) && echo "All files properly formatted." || { echo "Formatting issues found. Run 'make fmt' to fix."; exit 1; }