
# Compiler and flags
CC := g++
CXXFLAGS := -std=c++14 -Wall -Iinclude

# Directories
SRC_DIR := src
INC_DIR := include
OBJ_DIR := obj
BIN_DIR := bin


#
# === Executable Name ===
TARGET := $(BIN_DIR)/abc_lab

# === Find all .cpp files recursively in src/ ===
SRCS := $(shell find $(SRC_DIR) -name '*.cpp')

# === Convert src/foo/bar.cpp → obj/foo/bar.o ===
OBJS := $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRCS))

# === Default Target ===
all: $(TARGET)

# === Linking final executable ===
$(TARGET): $(OBJS)
	@mkdir -p $(dir $@)
	$(CXX) $(CXXFLAGS) -o $@ $^

# === Compiling source files to object files ===
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
	@mkdir -p $(dir $@)
	$(CXX) $(CXXFLAGS) -c $< -o $@

# Clean up
.PHONY: clean
clean:
	rm -rf $(OBJ_DIR) $(BIN_DIR)

# Optional: print debug info
.PHONY: info
info:
	@echo "Source files: $(SRCS)"
	@echo "Object files: $(OBJS)"
	@echo "CXXFLAGS: $(CXXFLAGS)"