makeにおいて、以下の構成でプロジェクトを作成したいのですが、objディレクトリにオブジェクトファイルを格納するようなMakefileはどのように作れば良いでしょうか。

環境構成

./
  ├ bin/     # 実行ファイル用ディレクトリ
  ├ include/ # インクルードファイル用ディレクトリ
  │  └ Util.h
  ├ obj/     # オブジェクトファイル用ディレクトリ
  ├ src/     # ソースコード用ディレクトリ
  │  ├ main.cxx
  │  └ Util.cxx
  └ Makefile

一応以下のやり方で実行ファイルの生成は出来ましたが、カレントディレクトリにオブジェクトファイルができてしまい、所望の動作ではないです。
(中途半端な変数化はスルーしてください・・・)

TARGET=./bin/test
SOURCES=$(wildcard src/*.cxx)
OBJECTS=$(notdir $(SOURCES:.cxx=.o))
VPATH=src

.SUFFIXES: .cxx .o

$(TARGET): $(OBJECTS)
    rm -f $@
    g++ -Wall -I./include -o $@ $^

.cxx.o:
    g++ -Wall -I./include -c $<

.PHONY: all clean
all:
    echo $(SOURCES)
    echo $(OBJECTS)
clean:
    rm -f *.o bin/*

オブジェクトファイルをobjディレクトリに格納するため、以下のようにしましたが、make時にエラーになってしまいます(-c $<が常にUtil.cxxを指してしまう)。

TARGET=./bin/test
SOURCES=$(wildcard src/*.cxx)
OBJECTS=$(patsubst src/%.cxx, obj/%.o, $(SOURCES))

$(TARGET): $(OBJECTS)
    rm -f $@
    g++ -Wall -I./include -o $@ $^

$(OBJECTS): $(SOURCES)
    g++ -Wall -I./include -o $@ -c $<

.PHONY: all clean
all:
    echo $(SOURCES)
    echo $(OBJECTS)
clean:
    rm -f bin/* obj/*

実行結果

$ make
g++ -Wall -I./include -o obj/Util.o -c src/Util.cxx
g++ -Wall -I./include -o obj/main.o -c src/Util.cxx # ここがNG。src/main.cxxになって欲しい

環境
GNU Make 3.81