CXX := g++
CXXFLAGS := -I ../include -std=c++20
#CXXFLAGS := -I ../include -std=c++20 -Wall -Wextra -Wpedantic -Werror
LDFLAGS  := 
DEPENDFLAGS := -MMD -MP

SOURCES := $(wildcard *.cpp)
OBJECTS := $(patsubst %.cpp,%.o,$(SOURCES))

MAIN_SOURCES := $(shell ls -1 *.cpp | xargs egrep '^ *int main' | awk -F: '{print $$1;}' | sort | uniq)
NON_MAIN_SOURCES := $(filter-out $(MAIN_SOURCES),$(SOURCES))
NON_MAIN_OBJECTS := $(patsubst %.cpp,%.o,$(NON_MAIN_SOURCES))

DEPENDS := $(patsubst %.cpp,%.d,$(SOURCES))

TARGETS := main-my-class main-my-class-0 main-my-class-2 main-my-class-3

all: $(TARGETS)

%: %.o $(NON_MAIN_OBJECTS)
	$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)

main-my-class: main-my-class.o $(NON_MAIN_OBJECTS)
main-my-class-0: main-my-class-0.o $(NON_MAIN_OBJECTS)
main-my-class-1: main-my-class-1.o $(NON_MAIN_OBJECTS)
main-my-class-2: main-my-class-2.o $(NON_MAIN_OBJECTS)
main-my-class-3: main-my-class-3.o $(NON_MAIN_OBJECTS)

%.o: %.cpp
	$(CXX) $(CXXFLAGS) $(DEPENDFLAGS) -o $@ -c $<

-include $(DEPENDS)

clean:
	-rm -f *.o *.d $(TARGETS) *~
