Чтобы вы двигались.
Вы можете исправить это, удалив некоторые вещи:
Из этой строки удалить OBJES
%.o: %.cpp $(OBJS) $(DEPS)
должно выглядеть так:
%.o: %.cpp $(DEPS)
В противном случае каждый объектный файл зависит от всех других объектных файлов. В этой зависимости будут циклы, на которые жалуется сообщение об ошибке.
Таким образом, объектный файл зависит от его исходного файла и заголовка, который использует исходный файл. Маловероятно, что это зависит от всех исходных файлов, но это не должно вызывать проблем (просто это может вызвать перекомпиляцию чаще, чем вам бы хотелось).
Из этой строки удалить DEPS
robot: $(OBJS) $(DEPS)
Должно выглядеть так:
robot: $(OBJS)
Исполняемый файл не должен зависеть от заголовочных файлов. Если какой-либо из объектных файлов будет перестроен, то исполняемый файл будет перестроен. Таким образом, дополнительный DEPS ничего не добавляет.
Это не идеальный Makefile, но он должен работать для вашего варианта использования.