How to set up a build system in C++, Python and Java

I don't know why, but setting up the build system for a new software project and maintaining it seems to be something people are always afraid of. I've often heard people say "Eclipse does the job. It's just additional work." This usually leads to confusion and a lot of bulk and weird solutions several days later when the project starts to evolve, ultimately with much more "additional work". Also in existing software project I have seen so many weird constructs effectively breaking the intended usage patterns and solutions of tools like CMake or setuptools, ending up with good software that is a nightmare to build and port to different platforms without insider knowledge.

To overcome at least the problem of setting up a usable build system at all I have created a tutorial with example projects for C++, Python and Java some time ago at work. This is probably also usable outside my university, so feel free to use that tutorial for you own needs: Build System Essentials.