YREA-SLS/SLS_C/Makefile

54 lines
1.1 KiB
Makefile

# 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)