# Makefile for SLS_C project CC ?= gcc CFLAGS ?= -std=c11 -Wall -Wextra -g LDFLAGS ?= SRCDIR := src OBJDIR := obj BINDIR := bin TESTDIR := tests TARGET := $(BINDIR)/sls_c SOURCES := $(wildcard $(SRCDIR)/*.c) OBJECTS := $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SOURCES)) TEST_SOURCES := $(wildcard $(TESTDIR)/test_*.c) TEST_BINS := $(patsubst $(TESTDIR)/test_%.c,$(BINDIR)/test_%,$(TEST_SOURCES)) .PHONY: all compile run test clean all: $(TARGET) compile: $(OBJECTS) $(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR) $(CC) $(CFLAGS) -c $< -o $@ $(TARGET): $(OBJECTS) | $(BINDIR) $(CC) $(LDFLAGS) $^ -o $@ run: $(TARGET) @echo "Running $(TARGET)..." ./$(TARGET) # Build test binaries from tests/test_*.c and run them $(BINDIR)/test_%: $(TESTDIR)/test_%.c | $(BINDIR) $(CC) $(CFLAGS) $< -o $@ test: $(TEST_BINS) @echo "Running tests..." @for t in $(TEST_BINS); do \ echo "== $$t =="; \ ./$$t || { echo "Test $$t failed"; exit 1; }; \ done @echo "All tests passed." $(BINDIR): mkdir -p $(BINDIR) $(OBJDIR): mkdir -p $(OBJDIR) clean: rm -rf $(OBJDIR) $(BINDIR)