CMake is a family of tools designed to build, test, and package software. It is used to control the software compilation process using simple platform- and compiler-independent configuration files. CMake generates native makefiles and workspaces that can be used in the compiler environment of your choice. It was created by Kitware in response to the need for a powerful, cross-platform build environment for Open-Source projects such as ITK and VTK.
CMake can handle in-place and out-of-place builds, enabling several builds from the same source tree, and cross-compilation. The ability to build a directory tree outside the source tree is a key feature, ensuring that if a build directory is removed, the source file remains unaffected. Another feature is the ability to generate a cache to be used with a graphical editor, which, when CMake is run, can locate executables, files, and libraries. This information goes into the cache, which can then be tailored before generating the native build files. Complicated directory hierarchies and applications that rely on several libraries are well supported by CMake. For instance, CMake is able to accommodate a project that has multiple toolkits, or libraries that each have multiple directories. In addition, CMake can work with projects that require executables to be created before generating code to be compiled for the final application. Its Open-Source, extensible design allows CMake to be adapted as necessary for specific projects.
It can generate makefiles for many platforms and IDEs including Unix, Windows, Mac OS X, OS/2, MSVC, Cygwin, MinGW, and Xcode. Projects which use CMake include Blender, Bullet physics engine, LLVM and Clang, MariaDB, MuseScore, MySQL, Qt5, Second Life, Stellarium, and SuperTux.