CMake
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. History 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 of producing 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. Continued development and improvements were fueled by the incorporation of CMake into developers’ own systems, including the VXL Project, the CABLE features added by Brad King, and GE Corporate R&D for support of DART. Additional features were created when VTK transitioned to CMake for its build environment and for supporting ParaView. Version 3.0 was released in June 2014. It has been described as the beginning of "Modern CMake". Experts now advise to avoid variables in favor of targets and properties. The commands , , , that were at the core of CMake 2 should now be replaced by target-specific commands. Features Separate build tree One of its major features is the ability to place compiler outputs (such as object files) into a build tree which is located outside of the source tree. This enables multiple builds from the same source tree and cross-compilation. Separate source and build files ensure that removing a build directory will not affect source files and prevents clutter which might confuse version control systems. Dependency management CMake keeps track and recompiles all the upstream dependencies of a given sub-module if