CXX := g++
CXXFLAGS := -Wall -I ../include -std=c++20 -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 main2 main3

all: $(TARGETS)

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

main: main.o $(NON_MAIN_OBJECTS)
main2: main2.o $(NON_MAIN_OBJECTS)
main3: main3.o $(NON_MAIN_OBJECTS)

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

-include $(DEPENDS)

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