It is very important to be able to define custom object name. With the current behavior it's impossible to compile any project, where there are at least two cpp files with identical names. Just overriding build command is insufficient.
This happens for example with ScummVM:
Which results in following build lines (after I override the build command for the second file):
scummvm/main.o: $(GLOBALDEPS) ../../base/main.cpp
$(CPP) -c ../../base/main.cpp -o scummvm/main.o $(CXXFLAGS)
scummvm/main.o: $(GLOBALDEPS) ../../backends/platform/sdl/main.cpp
$(CPP) -c ../../backends/platform/sdl/main.cpp -o scummvm/main1.o $(CXXFLAGS)
So basically main1.o is build, main.o not, because the second line overrides it. But yet only main.o is included into the build and link chain and of course isn't found!