# Basic Makefile for a C program with multiple source files and header dependencies

CC = gcc
CFLAGS = -Wall -Wextra -g -O0 -MMD -MP -std=c17
EXAMPLES_SRC = $(wildcard examples/*.c)
EXAMPLES_OBJ = $(EXAMPLES_SRC:.c=.o)
EXAMPLES = $(patsubst examples/%.c, %, $(wildcard examples/*.c))
LIB_SRC = $(wildcard coroutine/*.c)
LIB_OBJ = $(LIB_SRC:.c=.o)
OBJ = $(EXAMPLES_OBJ) $(LIB_OBJ)
DEP = $(OBJ:.o=.d)

all: $(EXAMPLES)

%: examples/%.o $(LIB_OBJ)
	$(CC) $(CFLAGS) -o $@ $^

%.o: %.c
	$(CC) $(CFLAGS) -I include -c $< -o $@

-include $(DEP)

clean:
	rm -f $(OBJ) $(DEP) $(EXAMPLES)

.PHONY: all clean
