FixFormat.cmake is a CMake module that provides utility functions for fixing source code formatting during your project's build process.
This module primarily includes target_fix_format and add_fix_format functions designed to fix the source code formatting required by the target before the compilation step.
Behind the scenes, this module utilizes ClangFormat to format the source codes. To enable the formatting to be fixed before the compilation step, the module searches through all source files used by the target and creates a format target that the main target later depends on.
- CMake version 3.21 or above.
- ClangFormat.
You can integrate this module into your project by including the FixFormat.cmake file in your project.
include(FixFormat)Alternatively, you can use CPM.cmake to seamlessly integrate this module into your project.
cpmaddpackage(gh:threeal/[email protected])To fix the source codes formatting required by a target, use the target_fix_format function. This function will automatically fix the formatting right before the compilation step of the target.
add_library(foo foo.cpp)
target_fix_format(foo)
add_executable(main main.cpp)
target_fix_format(main)Instead of calling the target_fix_format function individually for each target, you can also call the add_fix_format function after declaring all targets in the directory to enable formatting for those targets.
add_library(foo foo.cpp)
add_executable(main main.cpp)
add_fix_format()To fix the formatting of a target directly without building it, call a target named format- followed by the target name.
For example, the following command will fix the formatting of the main target:
cmake --build build --target format-mainAlternatively, you can also use the format-all target to fix the formatting of all targets without building them.
cmake --build build --target format-allSimilar to ClangFormat, you can configure the formatting style by including a .clang-format file.
Refer to this documentation for more information on configuring the formatting style.
This project is licensed under the terms of the MIT License.
Copyright © 2023-2025 Alfi Maulana