From 6d5e0fd99dda04da4c6dac0411a98bb1241a454e Mon Sep 17 00:00:00 2001 From: Kyler Date: Sun, 2 Nov 2025 22:14:33 -0700 Subject: [PATCH] Worked on makefile --- SLS_C/.gitignore | 3 +++ SLS_C/Makefile | 42 ++++++++++++++++++++++++++---------------- SLS_C/src/main.c | 2 +- SLS_C/tests/tests.c | 10 +++++----- 4 files changed, 35 insertions(+), 22 deletions(-) create mode 100644 SLS_C/.gitignore diff --git a/SLS_C/.gitignore b/SLS_C/.gitignore new file mode 100644 index 0000000..4b1992b --- /dev/null +++ b/SLS_C/.gitignore @@ -0,0 +1,3 @@ +obj/ +bin/ +*.o diff --git a/SLS_C/Makefile b/SLS_C/Makefile index 8f1fd9c..efdeeaa 100644 --- a/SLS_C/Makefile +++ b/SLS_C/Makefile @@ -1,6 +1,7 @@ -# Makefile for SLS_C project +# Makefile for SLS project + CC ?= gcc -CFLAGS ?= -std=c11 -Wall -Wextra -g +CFLAGS ?= -std=c11 -Wall -Wextra -g -Iinclude LDFLAGS ?= SRCDIR := src @@ -8,47 +9,56 @@ OBJDIR := obj BINDIR := bin TESTDIR := tests -TARGET := $(BINDIR)/sls_c +TARGET := $(BINDIR)/sls +TEST_TARGET := $(BINDIR)/sls_tests 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)) +TEST_SOURCES := $(wildcard $(TESTDIR)/*.c) +TEST_OBJECTS := $(patsubst $(TESTDIR)/%.c,$(OBJDIR)/%.o,$(TEST_SOURCES)) .PHONY: all compile run test clean +# Default: build main program all: $(TARGET) -compile: $(OBJECTS) +# Compile object files +build: $(OBJECTS) +# Rule to compile .c -> .o $(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR) $(CC) $(CFLAGS) -c $< -o $@ +# Rule to compile test .c -> .o +$(OBJDIR)/%.o: $(TESTDIR)/%.c | $(OBJDIR) + $(CC) $(CFLAGS) -c $< -o $@ + +# Link main program $(TARGET): $(OBJECTS) | $(BINDIR) $(CC) $(LDFLAGS) $^ -o $@ +# Run main program 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 $@ +# Build test runner executable +$(TEST_TARGET): $(TEST_OBJECTS) $(OBJECTS) | $(BINDIR) + $(CC) $(LDFLAGS) $^ -o $@ -test: $(TEST_BINS) +# Run tests +test: $(TEST_TARGET) @echo "Running tests..." - @for t in $(TEST_BINS); do \ - echo "== $$t =="; \ - ./$$t || { echo "Test $$t failed"; exit 1; }; \ - done - @echo "All tests passed." + ./$(TEST_TARGET) +# Create directories if missing $(BINDIR): mkdir -p $(BINDIR) $(OBJDIR): mkdir -p $(OBJDIR) +# Remove build artifacts clean: - rm -rf $(OBJDIR) $(BINDIR) \ No newline at end of file + rm -rf $(OBJDIR) $(BINDIR) diff --git a/SLS_C/src/main.c b/SLS_C/src/main.c index 367b10d..09c2f95 100644 --- a/SLS_C/src/main.c +++ b/SLS_C/src/main.c @@ -6,6 +6,6 @@ #include int main(void) { - printf("Hello, world!"); + printf("Hello, world!\n"); return 0; } diff --git a/SLS_C/tests/tests.c b/SLS_C/tests/tests.c index ed2a92c..25468b2 100644 --- a/SLS_C/tests/tests.c +++ b/SLS_C/tests/tests.c @@ -13,19 +13,19 @@ int main(void) { for (int i = 0; i < lexer_reports.count; i++) { switch (lexer_reports.tests[i].status) { case TEST_ERROR: - printf("\x1b[91mTest errored: %s\n\t%s\n", lexer_reports.tests[i].name, lexer_reports.tests[i].error.message); + printf("\x1b[91mTest errored: %s\n\t%s\n\x1b[0m", lexer_reports.tests[i].name, lexer_reports.tests[i].error.message); break; case TEST_ERROR_FAIL: - printf("\x1b[35mTest failed (errored): %s\n\t%s\n", lexer_reports.tests[i].name, lexer_reports.tests[i].error.message); + printf("\x1b[35mTest failed (errored): %s\n\t%s\n\x1b[0m", lexer_reports.tests[i].name, lexer_reports.tests[i].error.message); break; case TEST_LOGIC_FAIL: - printf("\x1b[31mTest failed: %s\n\t%s\n", lexer_reports.tests[i].name, lexer_reports.tests[i].message); + printf("\x1b[31mTest failed: %s\n\t%s\n\x1b[0m", lexer_reports.tests[i].name, lexer_reports.tests[i].message); break; case TEST_PASS: - printf("\x1b[32mTest passed: %s\n", lexer_reports.tests[i].name); + printf("\x1b[32mTest passed: %s\n\x1b[0m", lexer_reports.tests[i].name); break; case TEST_NOT_IMPLEMENTED: - printf("\x1b[34mTest not implemented: %s\n", lexer_reports.tests[i].name); + printf("\x1b[34mTest not implemented: %s\n\x1b[0m", lexer_reports.tests[i].name); break; } }