CC = gcc RM = rm SOURCES = $(wildcard src/*.c) OBJECTS = $(patsubst %.c,%.o,$(notdir $(SOURCES))) CFLAGS = -std=c17 -pedantic LDFLAGS = EXE = example EXE_EXT = out %.o: src/%.c $(CC) -c $< -o $@ $(CFLAGS) release: CFLAGS += -O3 release: compilation debug: CFLAGS += -Wall -Wextra -Wshadow -Wcast-align -Wstrict-prototypes debug: CFLAGS += -fanalyzer -fsanitize=undefined -g -Og debug: LDFLAGS += -fsanitize=undefined -fsanitize=leak debug: compilation compilation: $(OBJECTS) $(CC) -o $(EXE).$(EXE_EXT) $(OBJECTS) $(LDFLAGS) all: release clean: $(RM) $(OBJECTS) full-clean: clean $(RM) $(EXE).$(EXE_EXT)