The C++ build system that just works.

The problem(s)

The Compiler

You want to compile some files so it makes sense to ask a compiler, and it looks pretty straight-forward just to type in clang -o myprog.exe myprog.cpp, but then you realise it's using some outdated version of C++, so -std=c++17, and then you want to try it on Linux and are getting some linker errors, so you add -lstdc++ -lstdc++fs -lm -pthreads -fuse-ld=lld. As your project gains a .cpp file, so does your build comand. For every new project, you do this whole chore again.

The Script

You realise that invoking the compiler yourself is a chore, so you write a script to do it for you, have it index every file and pass it on to the compiler. You happily make modifications to this for different build targets and new projects, yet it doesn't support multi-threading, never reuses objects, and you're basically writing a build system now when all you wanted was to compile your project.

Build Systems

You don't want to make your own, so you look at popular ones. You've used make to compile a project before and that was really simple. Dare you take a look at the Makefile? It is not a pretty sight. Other build systems are no better, so there's build system generators because the build systems are so bad, yet none of this is any better than invoking the compiler yourself or making a compiler-invoking script.

The solution

We've waited and waited, and realised that C++ tooling is stagnated. So, that's why we've made Sun to match our values:

Sun on Github