you probably don't want to invest time into preventing people from disassembling your code: instead focus on making your project better, so that once your competitors have figured out how you did feature X, your software already has feature Y...
the reasoning is simple:
if you have a dull project, then nobody will care to disassemble it and you have invested all the time for nought.
otoh, if your product is cool, an armada of hackers will spent time to figure out how you did it. there is little you can do about it (and it happens to major players (like microsoft,...) as well).
but these hackers will always be one step behind: re-constructing a program from assembler is not trivial. so make sure that you keep moving, and they will stay behind.
make sure that your code does not contain debugging symbols.
gcc this basically means that you should turn off the
-g flag. (most likely this is exactly what Visual Studio's "Release" builds do for MSVC).
you might also think about static linking of external libraries (in order to keep code injection via the dynamic linker minimal)
do not trust any vendor, that providing a Release build will protect your binary in any way.