In software development, CMake is cross-platform free and open-source software for build automation, testing, packaging and installation of software by using a compiler-independent method. CMake is not a build system itself; it generates another system's build files. It supports directory hierarchies and applications that depend on multiple libraries. It is used in conjunction with native build environments such as Make, Qt Creator, Ninja, Android Studio, Apple's Xcode, and Microsoft Visual Studio. It has minimal dependencies, requiring only a C++ compiler on its own build system. CMake is distributed as free and open-source software under a permissive BSD-3-Clause license. CMake development began in 1999, in response to the need for a cross-platform build environment for the Insight Segmentation and Registration Toolkit (ITK). The project is funded by the United States National Library of Medicine as part of the Visible Human Project. It was partially inspired by , a predecessor to CMake, which was made by Ken Martin and other developers to support building of the Visualization Toolkit (VTK). pcmaker was a C program that converted Make files into MS Windows' NMake counterparts At Kitware, Bill Hoffman blended components of pcmaker with his own ideas, striving to mimic the functionality of Unix configure scripts. CMake was first implemented in 2000 and further developed in 2001. Historically CMake was conceived with the following major features in mind: depending only on system C++ compiler, meaning no third-party libraries to be able to generate VS Studio IDE input files capable to produce executable and linkable binary libraries (static and shared) to be able to run build-time code generators separate source/build file trees system checks and introspection (similar to Autotools): what system could and could not do automatically scan C/C++ deps cross-platform Because of these constraints CMake didn't choose to use Tcl (popular at the time) scripting language as its default and instead, developers decided to create a simpler scripting language.