be edited with a graphical editor, which is shipped with CMake. 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. IDE configuration support CMake can generate project files for several popular IDEs, such as Microsoft Visual Studio, Xcode, and Eclipse CDT. It can also produce build scripts for MSBuild or NMake on Windows; Unix Make on Unix-like platforms such as Linux, macOS, and Cygwin; and Ninja on both Windows and Unix-like platforms. Compiler feature detection CMake allows specification of features that the compiler is required to support in order to get the target program or library compiled. Compilers CMake supports an extensive list of compilers, including: Apple Clang, Clang, GNU GCC, MSVC, Oracle Developer Studio, and Intel C++ Compiler. Packaging system Even though CMake is not a package manager, it provides basic modules (see CPack) functions for installing binaries and package information declared by the script to be used by consumer CMake projects. The package may also be packed into an archive file for package manager or installer supported by a target platform. Third-party packages may also be imported via configured CMake files which are either provided by the same third-party or created manually. GUI Cmake is shipped with built-in ncurses program that can be used to configure projects via command-line interface. Build process The build of a program or library with CMake is a two-stage process. First, standard build files (usually scripts) are created (generated) from configuration files (CMakeLists.txt) which are written in CMake language. Then the platform's native build tools (native toolchain) are used for actual building of programs. The scripts generated by CMake are further used to produce actual binary files or other output files. Generators The build files are configured depending on the used generator (e.g. Unix Makefiles for make) and associated toolchain files. Advanced users can also create and incorporate additional makefile generators to support their specific compiler and OS needs. Generated files are typically placed (by using 's flag) into a folder outside of the source's one (out of source build),