There is no one specific or required directory structure.
You can set it up anyway you like. Your problem is simple to solve. Just instruct Makefile to look into subdirectories or put compiled objects into subdirectories instead of using just current directory.
You would just use in Makefile paths:
%.o : %.cpp
replace with
bin/%.o : %.cpp
So it will check if binary file in directory bin
exists and so on, you can apply the same to locations where files are compiled.
There are ways to add/remove/modify paths of source and object files.
Have a look at gnu make manual, specifically section 8.3 Functions for File Names,and the one before that 8.2 Functions for String Substitution and Analysis.
You can do stuff like:
get a list of objects from list of source files in current directory:
OBJ = $(patsubst %.cpp, %.o, $(wildcard *.cpp))
Output:
Application.o Market.o ordermatch.o
If binary objects are in subdirectory bin
but source code is in current directory you can apply prefix bin
to generated object files:
OBJ = $(addprefix bin/,$(patsubst %.cpp, %.o, $(wildcard *.cpp)))
Output:
bin/Application.o bin/Market.o bin/ordermatch.o
And so on.