I don't think you can make's string comparison take filepath normalization into account. (You know, make works on non-Unix machines like Windows, too, and you'd have to program each system's peculiarities into make if you'd want that kind of capabilities.)
There are two ways out of your dilemma:
1) feed filenames through
readlink before using them in your makefile (which canonicalizes not only . and .., but symlinks too).
or, better IMHO,
2) make
find start with a subdirectory ("find src -name \*.cpp") instead of the current directory, so the output will start with "src/" instead of "./".
Also note the difference between "=" and ":=" in make (evaluate always vs. evaluate once), and how "find . -name *.cpp" fails miserably when there is a .cpp file in the current directory (use "find . -name \*.cpp").
I see what you are trying to do - build in a different directory than the sources - and admit I haven't tweaked my own makefiles to do that, yet. I'll look into it and add it to the
Makefile tutorial.