Make, Ninja, Ant, Gradle, MSVC are some of the build systems. They help us to drive the compiler and other build tools. You may need to write a ‘build file’ to tell them the dependency information for them to build a software.
While this is already very convenient, the building of C/C++ projects is not standard across the platforms. Then you may need a ‘meta-build system’ to help you generate ‘build’ files for different build systems.
CMake is such a ‘meta-build system’ that can generate platform based system files by setting some flags.
See this article about the details of a buildsystem: What Is a Build System? - Scott Dorman