Difference between revisions of "Really Cool CMake Features"

From KitwarePublic
Jump to navigationJump to search
(Replace content with link to new CMake community wiki)
 
Line 1: Line 1:
CMake is a mature tool with many features, both big and small.  Many go unnoticed or are taken for granted.  Help us create a comprehensive list of features that make CMake really cool.  Please list your addition under the appropriate package: CMake, CTest, or CPack.
+
{{CMake/Template/Moved}}
  
== CMake Features ==
+
This page has moved [https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Really-Cool-CMake-Features here].
 
 
 
 
* Color output for make
 
* Progress output for make
 
* Incremental linking support with vs 8,9 and manifests
 
* Supports out-of-tree builds
 
* Auto-rerun of cmake if any cmake input files change (works with vs 8, 9 using ide macros)
 
* Auto depend information for C++, C, and Fortran
 
** [http://graphviz.org/ Graphviz] output for visualizing dependency trees
 
* Full support for library versions
 
* Full cross platform install system
 
* Generate project files for major IDEs: Visual Studio, Xcode, Eclipse, KDevelop
 
** not tied to make, other portable generators like ant possible
 
* Ability to add custom rules and targets
 
* Compute link depend information, and chaining of dependent libraries
 
* Works with parallel make and is fast, can build very large projects like KDE on build farms
 
* make help, make foo.s, make foo.E, VERBOSE=1 make PROJECT/fast
 
* Advanced RPATH handling, full support for all kinds of static/shared libs and plugins, no more cryptic foo.la libtool "libraries"
 
* support for chrpath, i.e. changing the RPATH without need to actually link again
 
* Works on many host operating systems (a full list would be good)
 
* Supports many toolchains: GNU, MS, Borland, Sun, also e.g sdcc
 
* Beta cross compiling, to Linux, Windows, eCos, supercomputers, no OS, from 8bit uCs to 64bit CPUs
 
* Full dependencies: build a target in some directory, and everything this target depends on will be up to date
 
* Extensive test suite and nightly builds/test on many platforms
 
* modular design (e.g. the Find modules, language, toolchain and OS support files) * > easily extendable
 
* just one tool instead of automake+autoconf+libtool+m4+shell+make
 
* Good scripting language that supports:
 
** control structures (conditional, iterative)
 
** regular expressions, eliminating need for grep+awk+sed+perl
 
** macros (similar to functions, with counted or vararg parameters)
 
** portable commands for file and directory manipulation
 
* Extensive auxiliary cmake modules for finding and simplifying use of popular libraries (boost, sdl, fltk, etc.) and utilities (swig, etc).
 
* Comes with a GUI layer for easy edition of input variables, both Curses and QT based options.
 
* Command line support
 
* it's a native tool, windows devs don't have to deal with POSIX shells, OSX devs can continue to use XCode
 
* .tar.gz archiving available on all platforms: no need to chase down tar/gzip for Windows
 
* can create OSX library frameworks
 
* can create OSX application bundles
 
* scales well for really, really big projects like KDE
 
 
 
==  CTest Features ==
 
* Run all or sub-sets of tests for a project
 
* Submit testing results to Dart 1,2 and CDash
 
* Run tests that build and run --build-and-test command
 
* support coverage with gcc, and bullseye coverage tools
 
* support memory checking with valgrind, purify, and bounds checker
 
 
 
==  CPack Features ==
 
* Simple Declarative creation of packages/installers using CMake+CPack
 
* Create Source or Binary packages
 
* A wealth of supported formats:
 
** Create professional windows installers with [http://nsis.sourceforge.net/Main_Page NSIS]
 
** Create tar.gz tar.Z on any platform
 
** Create self extracting tar.gz .sh files
 
** Create rpm
 
** Create Debian .deb files
 
** Create Cygwin setup packages
 
 
 
{{CMake/Template/Footer}}
 

Latest revision as of 11:41, 30 April 2018


The CMake community Wiki has moved to the Kitware GitLab Instance.

This page has moved here.