生成ルールのターゲットになるのは *.cppじゃなくて *.o だろ?

-oオプションで指定しない限り,コンパイルしたオブジェクトファイルは
カレントディレクトリに作られるので
window.o: subdir/window.cpp subdir.window.h
となって当然だと思う。

infoを見ると、-MT target というオプションをつけると変更できるようなので、
どうしてもというなら、${SRCS}についてループを回せばできるんじゃないかな。