This project aims to provide a quick and easy way to integrate clang-format into your CMake project hosted in a git repository, it consists of three elements.
CMakeLists.txt
provides the customformat
targetgit-pre-commit-hook
blocks commits of unformatted C/C++ filesgit-cmake-format.py
is called by theformat
target or thepre-commit
hook, it queries git for edited files, then block the commit or formats the sources
There are three dependencies:
git
2.7+python
2.7+clang-format
To make use of this project you can either add it as a submodule to your
existing project, or copy the files into your repository.
It is mandatory to set GCF_TOP_LEVEL_DIR
to the directory of the git repository
in which the hooks should be installed.
You can add the following to your CMakeLists.txt
.
set(GCF_GIT_TOP_LEVEL_DIR ${CMAKE_SOURCE_DIR})
add_subdirectory(/path/to/git-cmake-format)
Next you can generate your build system, assuming the required dependencies are available on your path.
cd build
cmake ..
The installation of the pre-commit
hook is done at CMake time during the
generation of the build system, if you have followed these steps it is already
installed at /path/to/your/project/.git/hooks/pre-commit
.
It is possible to specify the path to any of the executables this project depends upon using the following CMake variables.
GCF_GIT_PATH:STRING=/path/to/git
GCF_PYTHON_PATH:STRING=/path/to/python
GCF_CLANGFORMAT_PATH:STRING=/path/to/clang-format
defaults toclang-format
GCF_CLANGFORMAT_MINIMAL_VERION:STRING=minimal_version
defaults to0.0.0
It is also possible to set the -style=
command line argument for
clang-format
with the following options, the default is file
GCF_CLANGFORMAT_STYLE:STRING=WebKit
By default, the hook and script are not installed if a custom hook or the script is already present. This behavior can be changed by setting
GCF_FORCE_OVERWRITE:BOOL
defaultOFF
to ON
.