It really does not do exactly what you want it to do. Lets say I have this layout:
/root
/src
/main
/extras
/include
/main
/extras
/obj
/bin
cbproject.cbp
Now I want to put all my object files in the object directory like so
/obj
/main
/myobject.o
/extras
/extraobj.o
What CB does is this:
/obj
/src
/main
/myobject.o
/extras
/extraobj.o
It basically mirrors its source tree into the object directory. This even hapens if the project file is in its own sub directory. I think this a because problem because CB kind of is built around a project layouts that don't have a specific header and source directory. You can see this in the project file layouts, I always have separate src, and include directories and the codeblocks project files always have the double Source/src and Include/include structure. It is kind of annoying.