Migration from cmake-format
Switching to cmakefmt is designed to be straightforward. The goal is easy
adoption, not a risky repository-wide rewrite — roll out incrementally, compare
output at each step, and commit to full migration once you are satisfied.
Recommended Rollout
Section titled “Recommended Rollout”-
Start with
--checkon a small, low-risk directory to get a feel for the output before touching anything:Terminal window cmakefmt --check cmake/ -
Generate a starter config. YAML is the recommended default:
Terminal window cmakefmt --dump-config > .cmakefmt.yaml -
If you already have a
cmake-formatconfig file, convert it automatically:Terminal window cmakefmt --convert-legacy-config .cmake-format.py > .cmakefmt.yamlYAML is the default output format. For TOML instead, pass
--convert-legacy-config-format tomlto the same command. -
Compare output on a representative sample. Use
--diffto see exactly what would change without touching any files:Terminal window cmakefmt --diff path/to/CMakeLists.txt -
When the output looks good across your sample, expand to
--check .on the full repository:Terminal window cmakefmt --check . -
Switch pre-commit and CI once you are happy with the full-repository output.
If you want to roll out formatting gradually — file by file — use
--require-pragma to opt individual files in before going repository-wide.
See Formatter Behavior for the pragma syntax.
CLI Mapping
Section titled “CLI Mapping”cmake-format intent | cmakefmt equivalent |
|---|---|
| format file to stdout | cmakefmt FILE |
| in-place format | cmakefmt -i FILE |
| CI check | cmakefmt --check PATH |
| recursive target filtering | cmakefmt --path-regex REGEX PATH |
| convert old config file | cmakefmt --convert-legacy-config OLD.py > .cmakefmt.yaml |
| disable formatting regions | supports both cmake-format and cmakefmt spellings |
Compatibility Notes
Section titled “Compatibility Notes”- the goal is easy adoption, not output identity
- the built-in command registry is audited through CMake 4.3.1
--configis still accepted as an alias for--config-file--path-regexreplaces the older--file-regex- any compatibility gaps should be reported as bugs, not silently worked around
Operational Advice
Section titled “Operational Advice”Start small, build confidence, then go wide. Formatter migrations become painful when the first exposure is a large repository-wide rewrite with no comparison data. The recommended pattern:
-
Run
--diffor--checkon a representative subset before committing to anything. -
Capture a before/after snapshot on a branch so you can review the delta as a normal diff.
-
Use
--require-pragmaif you want to phase the rollout file-by-file rather than all at once. -
Pin an explicit version in CI once you are happy:
Terminal window cmakefmt --required-version 0.0.1 --check .
Output will not be identical to cmake-format. The goal is a clean,
correct, stable result — not byte-for-byte reproduction. Judge the migration by
readability, idempotency, and ease of automation rather than by whether every
wrapped line matches historical output exactly. See Formatter Behavior
for a concrete summary of what cmakefmt preserves and what it intentionally changes.