# MSVC nmake build file for SLS CC = cl CFLAGS = /std:c11 /W4 /WX /Zi /I include LDFLAGS = SRCDIR = src OBJDIR = obj BINDIR = bin TESTDIR = tests TARGET = $(BINDIR)\sls.exe TEST_TARGET = $(BINDIR)\sls_tests.exe # --- MANUALLY LIST SOURCE FILES HERE --- SOURCES = \ $(SRCDIR)\main.c \ $(SRCDIR)\lexer.c \ $(SRCDIR)\string.c TEST_SOURCES = \ $(TESTDIR)\lexer_tests.c # --------------------------------------- OBJECTS = $(SOURCES:$(SRCDIR)\%.c=$(OBJDIR)\%.obj) TEST_OBJECTS = $(TEST_SOURCES:$(TESTDIR)\%.c=$(OBJDIR)\%.obj) # Default rule all: build # === BUILD MAIN PROGRAM === build: $(TARGET) $(TARGET): dirs $(OBJECTS) link $(OBJECTS) /OUT:$@ $(LDFLAGS) # === COMPILE RULE === $(OBJDIR)\%.obj: $(SRCDIR)\%.c $(CC) $(CFLAGS) /c $< /Fo$@ $(OBJDIR)\%.obj: $(TESTDIR)\%.c $(CC) $(CFLAGS) /c $< /Fo$@ # === RUN PROGRAM === run: $(TARGET) $(TARGET) # === TEST BUILD & RUN === test: $(TEST_TARGET) $(TEST_TARGET) $(TEST_TARGET): dirs $(TEST_OBJECTS) $(OBJECTS:$(OBJDIR)\main.obj=) link $(TEST_OBJECTS) $(OBJECTS:$(OBJDIR)\main.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)