CMake
From Wikipedia, the free encyclopedia
CMake | |
---|---|
Developed by | Andy Cedilnik, Bill Hoffman, Brad King, Ken Martin, Alexander Neundorf |
Latest release | 2.6.0 / 6 May 2008 |
OS | Cross-platform |
Genre | Software development tools |
License | BSD License |
Website | http://www.cmake.org/ |
CMake is a cross-platform system for build automation. It is comparable to the Unix Make program in that the build process is ultimately controlled by configuration files, in the case of CMake called CMakeLists.txt files. Unlike Make, it does not directly build the final software, but instead generates standard build files (e.g., makefiles on Unix and projects/workspaces in Windows Visual C++) which are used in the usual way. This allows developers familiar with a particular development environment (such as the various IDEs) to use it in the standard way. It is this use of the native build environment that distinguishes CMake from most other similar systems like SCons. CMake can compile source code, create libraries, generate wrappers, and build executables in arbitrary combinations. CMake supports in-place and out-of-place builds, and can therefore support multiple builds from a single source tree. CMake also supports static and dynamic library builds.
The name "CMake" is an abbreviation for "cross platform make". Despite the use of "make" in the name, CMake is a separate and higher-level application suite than the make system common to Unix development.
Contents |
[edit] History
CMake was created in response to the need for a suitable cross-platform build environment for the Insight Segmentation and Registration Toolkit (ITK) funded by the United States National Library of Medicine as part of the Visible Human Project. It was influenced by an earlier system called pcmaker created by Ken Martin and other developers to support the Visualization Toolkit (VTK), an open-source 3D graphics and visualization system. To create CMake, Bill Hoffman at Kitware incorporated some key ideas from pcmaker, and added many more of his own, with the thought to adopt some of the functionality of the GNU build system. The initial CMake implementation was mid-2000, with accelerated development occurring in early 2001. Many improvements were due to the influences of other developers incorporating CMake into their own systems. For example, the VXL software community adopted CMake as their build environment, contributing many essential features. Brad King added several features in order to support CABLE and GCC-XML, a set of automated wrapping tools; and GE Corporate R&D required support of their testing infrastructure (DART). Other features were added to support the transition of VTK's build environment to CMake, and to support ParaView, a parallel visualization system to support the Advanced Computing Lab at Los Alamos National Laboratory.
[edit] Major features
- Configuration files are CMake scripts, which use a programming language specialized to software builds
- Automatic dependency analysis built-in for C, C++, Fortran and Java,
- Support of SWIG, Qt, FLTK via the CMake scripting language,
- Built-in support for Microsoft Visual Studio .NET and past Visual Studio versions, including generation of .dsp, .dsw, .sln and .vcproj files,
- Detection of file content changes using traditional timestamps,
- Support for parallel builds,
- Cross-compilation
- Global view of all dependencies, using CMake to output a graphviz diagram,
- Support for cross-platform builds, and known to work on Linux, other POSIX systems (including AIX, *BSD systems, HP-UX, IRIX/SGI, MinGW/MSYS and Solaris), Mac OS X and Windows 95/98/NT/2000/XP,
- Integrated with DART_(software), CTest and CPack, a collection of tools for software testing and release.
[edit] Applications using Cmake
- Bullet Physics Engine
- KDE (starting with version 4)
- The Visualization Toolkit
- Insight Segmentation and Registration Toolkit
- ParaView
- DevIL - Open Image Library
- OpenSceneGraph
- Scribus
- Kicad
- Drishti
- PvPGN
- Chicken
- ParadisEO
- Quantum GIS
- lurc
- MuseScore
- Avidemux
- IGSTK
- Slicer