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.txtprovides the customformattargetgit-pre-commit-hookblocks commits of unformatted C/C++ filesgit-cmake-format.pyis called by theformattarget or thepre-commithook, it queries git for edited files, then block the commit or formats the sources
There are three dependencies:
git2.7+python2.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/gitGCF_PYTHON_PATH:STRING=/path/to/pythonGCF_CLANGFORMAT_PATH:STRING=/path/to/clang-formatdefaults toclang-formatGCF_CLANGFORMAT_MINIMAL_VERION:STRING=minimal_versiondefaults 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:BOOLdefaultOFF
to ON.