If you write make files to build everything in twice, release and debug, you&#x27;re doing it wrong. The proper way to do this is to write make files so you can do &quot;out-of-tree&quot; builds, i.e. your build directory is outside your source directory and each build directory has its own configuration.<p>This has the significant advantage that you can not just build 2 or 3 or however many different configurations you would think important enough to hard code in the build system from one source tree, but as many as anyone who builds it happens to need.<p>Incidentally this is one thing that GNU autotools get right.<p>It is true that if you use target specific variables you have to ensure yourself that you set them in such a way that no non-deterministic behavior can occur; it would be great if make reported a warning in such cases.  Another problem with them is that you can&#x27;t invoke make with a single object file target any more if that requires a variable set on and inherited from the corresponding link target to compile.