Mais merde, j'ai réussi à faire lire une doc?
Virez votre règle '%.o: %.cpp %.hpp', elle ne sert à rien vu vos dépendances explicites. En fait, dans votre cas, vous n'avez besoin que d'une règle de linkage puisque qu'il n'y a pas de relation entre la cible (de linkage) et les objets; ensuite avec les règles implicites qui vont biens, un petit 'CXXFLAGS += -Wp,-MT,$@,-MMD,$(@:.o=.d)' et un '-include *.d' à la fin le tout est emballé en qques lignes.
Il est aussi très simple de fabriquer la liste des sources, et celle dérivée des objets, pour peu que les fichiers soient posés comme il faut avec $(wildcard ...), $(patsubst ...) etc...
J'me répète mais le truc c'est d'en écrire le moins possible.