Skip to content

Intended to be the single point of truth of the/a .clang-format file (C++ code auto formatting configuration). Mainly handling storage and versioning here. But there is also useful tool support for creating format-all CMake targets or applying formatting during pre-commit git hooks.

License

Notifications You must be signed in to change notification settings

devmarkusb/clangformat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

clangformat

build

Intended to be the single point of truth of the/a .clang-format file (C++ code auto formatting configuration). Mainly handling storage and versioning here. But there is also useful tool support for creating format-all CMake targets or applying formatting during pre-commit git hooks. See Usage section for that.

Requirements

Preferred clang-format version: see MB_CLANGFORMAT_VER in CMakeLists.txt, which you can configure to be a higher version also of course. Although plain clang-format is used if the preferred version is not available.

This needs to be updated when using features in .clang-format not supported by lower versions.

Usage

Example cmake inclusion in your repo

cmake_minimum_required(VERSION 3.14)

include(FetchContent)

FetchContent_Declare(mb-clangformat
        GIT_REPOSITORY "https://github.com/devmarkusb/clangformat"
        GIT_TAG origin/HEAD
        GIT_SHALLOW ON
        )

FetchContent_MakeAvailable(mb-clangformat)

# of course the copied files are not intended to be edited
file(COPY ${mb-clangformat_SOURCE_DIR}/.clang-format DESTINATION ${PROJECT_SOURCE_DIR}/)
file(COPY ${mb-clangformat_SOURCE_DIR}/clangformat.sh DESTINATION ${PROJECT_SOURCE_DIR}/
        FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)

Then you could add

script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"

$script_dir/../clangformat.sh

to your pre-commit git hook file, in order to apply formatting on each commit automatically.

Additionally, you can include the following lines in your project's CMakeLists.txt files, which will add a clang-format target per project. When building the target every file from list of subdirs (recursively) will be formatted.

set(cxx_dirs "apps;include;libs;sdks;source;src;test")

add_clang_format_project_target("${cxx_dirs}")

Be careful to really pass a semicolon separated list of subdir strings. In the example add_clang_format_project_target(${cxx_dirs}) without quotes wouldn't work.

templates?

A directory for storing examples, other versions, or certain default styles, just for comparison.

About

Intended to be the single point of truth of the/a .clang-format file (C++ code auto formatting configuration). Mainly handling storage and versioning here. But there is also useful tool support for creating format-all CMake targets or applying formatting during pre-commit git hooks.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published