The following is a guide to the CMake source code for developers. See documentation on CMake Development for more information.
We use clang-format version 3.8 to define our style for C++ code in
the CMake source tree. See the .clang-format configuration file for our
style settings. Use the Utilities/Scripts/clang-format.bash script to
format source code. It automatically runs clang-format
on the set of
source files for which we enforce style. The script also has options to
format only a subset of files, such as those that are locally modified.
CMake requires compiling as C++11 or above. However, in order to support building on older toolchains some constructs need to be handled with care:
Do not use
std::auto_ptr
.The
std::auto_ptr
template is deprecated in C++11. Usestd::unique_ptr
.Use
CM_DISABLE_COPY(Class)
to mark classes as non-copyable.The
CM_DISABLE_COPY
macro should be used in the private section of a class to make sure that attempts to copy or assign an instance of the class lead to compiler errors even if the compiler does not support deleted functions. As a guideline, all polymorphic classes should be made non-copyable in order to avoid slicing. Classes that are composed of or derived from non-copyable classes must also be made non-copyable explicitly withCM_DISABLE_COPY
.Use
size_t
instead ofstd::size_t
.Various implementations have differing implementation of
size_t
. When assigning the result of.size()
on a container for example, the result should be assigned tosize_t
not tostd::size_t
,unsigned int
or similar types.
The CMake source tree is organized as follows.
Auxiliary/
: Shell and editor integration files.Help/
: Documentation.Help/dev/
: Developer documentation.Help/release/dev/
: Release note snippets for development since last release.
Licenses/
: License files for third-party libraries in binary distributions.Modules/
: CMake language modules installed with CMake.Packaging/
: Files used for packaging CMake itself for distribution.Source/
: Source code of CMake itself.Templates/
: Files distributed with CMake as implementation details for generators, packagers, etc.Tests/
: The test suite. See Tests/README.rst.Utilities/
: Scripts, third-party source code.Utilities/Sphinx/
: Sphinx configuration to build CMake user documentation.Utilities/Release/
: Scripts used to package CMake itself for distribution oncmake.org
.