How does CMake work? What does it do exactly?