# MSVC nmake build file for SLS CC = cl CFLAGS = /std:c11 /Zi /I include LDFLAGS = SRCDIR = src OBJDIR = obj BINDIR = bin TESTDIR = tests TARGET = $(BINDIR)\sls.exe TEST_TARGET = $(BINDIR)\sls_tests.exe # === LIST FILES MANUALLY (edit as needed) === SOURCES = \ $(SRCDIR)\main.c \ $(SRCDIR)\lexer.c \ $(SRCDIR)\string.c OBJECTS = \ $(OBJDIR)\main.obj \ $(OBJDIR)\lexer.obj \ $(OBJDIR)\string.obj TEST_SOURCES = \ $(TESTDIR)\extra_tests.c \ $(TESTDIR)\lexer_test_helpers.c \ $(TESTDIR)\lexer_tests.c \ $(TESTDIR)\string_tests.c \ $(TESTDIR)\tests.c TEST_OBJECTS = \ $(TESTDIR)\extra_tests.obj \ $(TESTDIR)\lexer_test_helpers.obj \ $(TESTDIR)\lexer_tests.obj \ $(TESTDIR)\string_tests.obj \ $(TESTDIR)\tests.obj # ============================================ # Default target all: build # === BUILD MAIN PROGRAM === build: $(TARGET) $(TARGET): dirs $(OBJECTS) link $(OBJECTS) /OUT:$@ $(LDFLAGS) # === COMPILE RULES === $(OBJDIR)\main.obj: $(SRCDIR)\main.c $(CC) $(CFLAGS) /c $(SRCDIR)\main.c /Fo$(OBJDIR)\main.obj $(OBJDIR)\lexer.obj: $(SRCDIR)\lexer.c $(CC) $(CFLAGS) /c $(SRCDIR)\lexer.c /Fo$(OBJDIR)\lexer.obj $(OBJDIR)\string.obj: $(SRCDIR)\string.c $(CC) $(CFLAGS) /c $(SRCDIR)\string.c /Fo$(OBJDIR)\string.obj $(OBJDIR)\lexer_tests.obj: $(TESTDIR)\lexer_tests.c $(CC) $(CFLAGS) /c $(TESTDIR)\lexer_tests.c /Fo$(OBJDIR)\lexer_tests.obj # === RUN EXECUTABLE === run: $(TARGET) $(TARGET) # === TEST BUILD & RUN === test: $(TEST_TARGET) $(TEST_TARGET) $(TEST_TARGET): dirs $(TEST_OBJECTS) $(OBJDIR)\lexer.obj $(OBJDIR)\string.obj link $(TEST_OBJECTS) $(OBJDIR)\lexer.obj $(OBJDIR)\string.obj /OUT:$@ $(LDFLAGS) # === CREATE DIRECTORIES === dirs: if not exist $(OBJDIR) mkdir $(OBJDIR) if not exist $(BINDIR) mkdir $(BINDIR) # === CLEAN === clean: rmdir /s /q $(OBJDIR) rmdir /s /q $(BINDIR)