CC = clang AXL_SOURCES = $(filter-out main.c %_test.c, $(wildcard *.c)) TEST_EXES = $(patsubst %.c,%.exe,$(wildcard *_test.c)) TEST_CFLAGS = -Wall -Wextra -Werror -pedantic -std=c17 -static -Oz -fsigned-char CFLAGS = $(TEST_CFLAGS) -nostdlib -ffreestanding -fno-builtin LDFLAGS = -Wl,/SUBSYSTEM:CONSOLE,/ENTRY:_start -fuse-ld=lld LIBS = -lkernel32 SOURCES = $(AXL_SOURCES) main.c TARGET = prog.exe all: clean test $(TARGET) %_test.exe: %_test.c $(CC) $(TEST_CFLAGS) $(AXL_SOURCES) $< -o $@ test: $(TEST_EXES) for %%i in ($(TEST_EXES)) do ( \ echo Running %%i && \ %%i || exit /b 1 \ ) $(TARGET): $(SOURCES) $(CC) $(CFLAGS) $(SOURCES) -o $(TARGET) $(LDFLAGS) $(LIBS) clean: rm -f $(TARGET) rm -f $(TEST_EXES) .PHONY: all clean test