CC = gcc CFLAGS = -Wall -Wextra -std=c99 -I$(HEADERS_DIR) BIN_DIR = bin BUILD_DIR = build CORE_DIR = core MODULES_DIR = modules HEADERS_DIR = include SRC_FILES = $(wildcard $(CORE_DIR)/*.c) $(wildcard $(MODULES_DIR)/*.c) OBJ_FILES = $(patsubst %.c,$(BUILD_DIR)/%.o,$(notdir $(SRC_FILES))) TARGET = $(BIN_DIR)/cpm all: $(TARGET) $(TARGET): $(OBJ_FILES) | $(BIN_DIR) $(CC) $(CFLAGS) -o $@ $(OBJ_FILES) $(BUILD_DIR)/%.o: $(CORE_DIR)/%.c | $(BUILD_DIR) $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR)/%.o: $(MODULES_DIR)/%.c | $(BUILD_DIR) $(CC) $(CFLAGS) -c $< -o $@ $(BUILD_DIR): mkdir -p $(BUILD_DIR) $(BIN_DIR): mkdir -p $(BIN_DIR) clean: rm -rf $(BUILD_DIR)/* .PHONY: all clean