CMakePresets.jsonで最初に設定しておくべきこと
CMakeのコマンドを毎回手で打っていると、オプションが増えた時点でつらくなります。
cmake -S . -B build/debug -DCMAKE_BUILD_TYPE=Debug -DENABLE_TESTS=ON
cmake --build build/debug
個人で使うだけならまだよいですが、チームやCIで同じ設定を使うなら CMakePresets.json に寄せる方が扱いやすいです。
公式ドキュメントでは、共通のconfigure方法を共有する仕組みとして CMakePresets.json と CMakeUserPresets.json が説明されています。
https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html
CMakePresets.jsonに書くもの
最小構成はこんな感じです。
{
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 25,
"patch": 0
},
"configurePresets": [
{
"name": "debug",
"displayName": "Debug",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"ENABLE_TESTS": "ON"
}
}
],
"buildPresets": [
{
"name": "debug",
"configurePreset": "debug"
}
]
}
使う側はこうなります。
cmake --preset debug
cmake --build --preset debug
コマンドが短くなるだけでなく、設定名として残るのが便利です。
configurePresets
configurePresets は、cmake -S . -B build ... に相当する設定です。
よく設定するのはこのあたりです。
| 項目 | 内容 |
|---|---|
name |
コマンドで使う名前 |
displayName |
表示用の名前 |
generator |
Ninjaなどのジェネレータ |
binaryDir |
ビルドディレクトリ |
cacheVariables |
-D で渡す値 |
binaryDir はpresetごとに分けておきます。
"binaryDir": "${sourceDir}/build/debug"
DebugとReleaseで同じbuildディレクトリを使い回すと、キャッシュが混ざって分かりにくくなります。
クロスコンパイル用のtoolchain fileを毎回指定する場合も、presetに寄せると扱いやすくなります。toolchain file側の基本は CMakeでクロスコンパイルするときのtoolchain fileの書き方 にまとめています。
buildPresets
buildPresets は、cmake --build に相当する設定です。
"buildPresets": [
{
"name": "debug",
"configurePreset": "debug"
}
]
configurePreset で、どのconfigure設定に対応するbuildなのかを指定します。
これで次のコマンドが使えます。
cmake --build --preset debug
DebugとReleaseを分ける
よく使う形は、DebugとReleaseを分ける構成です。
{
"version": 6,
"configurePresets": [
{
"name": "debug",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "release",
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
}
],
"buildPresets": [
{
"name": "debug",
"configurePreset": "debug"
},
{
"name": "release",
"configurePreset": "release"
}
]
}
CMAKE_BUILD_TYPE は、MakefileやNinjaのようなsingle-config generatorで使うビルドタイプです。
https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
Visual StudioやNinja Multi-Configを使う場合は考え方が少し変わりますが、まずはNinja前提ならこの形で十分です。
CMakeUserPresets.jsonとの使い分け
公式ドキュメントでは、CMakePresets.json はプロジェクト共有用、CMakeUserPresets.json は各開発者のローカル設定用と説明されています。
https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html
リポジトリに入れるのは CMakePresets.json。
個人の環境だけで使うパスやオプションは CMakeUserPresets.json に入れて、Git管理から外します。
CMakePresets.json # commitする
CMakeUserPresets.json # commitしない
まとめ
ビルドコマンドが長くなってきたら、CMakePresets.json に寄せます。
configurePresetsにconfigure設定を書くbuildPresetsにbuild設定を書くbinaryDirはpresetごとに分けるcacheVariablesに-Dオプションを書く- 共有設定は
CMakePresets.json、個人設定はCMakeUserPresets.json
CIやREADMEに長いCMakeコマンドを書く前に、preset化しておくと後から扱いやすくなります。


