I am absolutely in love with CMake. For years I have been looking at automating the cross platform build-process. There are may tools made for this process. I think CMake is one of the best in the lot. Here are a few stunning capabilities of CMake that I find extremely useful.
Features of CMake
- can handle in-place and out-of-place builds
- ability to build a directory tree outside the source tree
- ability to generate a cache to be used with a graphical editor
- can locate executables, files and libraries
- able to accommodate a project that has multiple toolkits, or libraries that each have multiple directories
- can work with projects that require executables to be created before generating code to be compiled
- open-source
- CMake can generate makefiles for many platforms and IDEs
From a scientific computing perspective, the following features are excellent
- support for MPI, OpenMP, CUDA and OpenCL
- support for multiple compilers, e.g., GNU, Intel, clang
- able to work with python, numpy, scipy etc
- able to work with LaTeX
- support for Doxygen