CC := gcc CFLAGS := -Wall -MMD -MP -std=c99 -DNDEBUG LFLAGS := -lSDL3 -lGL # ============================================================================== EXEC := game BUILD := build BIN := $(BUILD)/bin OBJ := $(BUILD)/obj SRC := src TEST := test TESTBIN := $(TEST)/bin TESTOBJ := $(TEST)/obj # ============================================================================== SRCS := $(shell find $(SRC) -name '*.c') OBJS := $(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(SRCS)) DEPS := $(OBJS:.o=.d) LIBOBJS = $(filter-out $(OBJ)/main.o, $(OBJS)) TESTS := $(wildcard $(TEST)/*.c) TESTOBJS := $(patsubst $(TEST)/%.c, $(TESTOBJ)/%.o, $(TESTS)) TESTBINS := $(patsubst $(TEST)/%.c, $(TESTBIN)/%, $(TESTS)) TESTDEPS := $(TESTOBJS:.o=.d) # ============================================================================== $(BIN)/$(EXEC): $(OBJS) @mkdir -p $(BIN) $(CC) -o $@ $^ $(LFLAGS) $(OBJ)/%.o: $(SRC)/%.c @mkdir -p $(dir $@) $(CC) $(CFLAGS) -c -o $@ $< .PHONY: run run: ${BIN}/${EXEC} ./${BIN}/${EXEC} .PHONY: test test: ${TESTBIN}/test_vec ./run_tests.sh $(TESTBIN)/%: $(TESTOBJS) $(LIBOBJS) @mkdir -p $(TESTBIN) $(CC) -o $@ $^ $(LFLAGS) $(TESTOBJ)%.o: $(TEST)/%.c @mkdir -p $(dir $@) $(CC) $(CFLAGS) -c -I$(SRC) -o $@ $< -include $(DEPS) .PHONY: clean clean: rm -rf ${BIN} rm -rf ${OBJ} rm -rf ${TESTBIN} rm -rf ${TESTOBJ}