CMakePresets.json
および CMakeUserPresets.json
Microsoft ベンダー マップ
CMake でサポートされている 2 つのファイル CMakePresets.json
と CMakeUserPresets.json
を使用すると、ユーザーは一般的な構成、ビルド、テストのオプションを指定し、他のユーザーと共有できます。
CMakePresets.json
と CMakeUserPresets.json
を使用して、Visual Studio、Visual Studio Code、継続的インテグレーション (CI) パイプライン、およびコマンド ラインから CMake を実行できます。
CMakePresets.json
はプロジェクト全体のビルドを保存することを目的としており、CMakeUserPresets.json
は開発者が独自のローカル ビルドを保存することを目的としています。 スキーマはどちらのファイルも同じです。
CMakePresets.json
と CMakeUserPresets.json
では、ベンダー固有の情報を格納するためのベンダー マップがサポートされます。 Microsoft は、Visual Studio と Visual Studio Code に固有のオプションを含む 2 つのベンダー マップを保持しています。 ここでは、2 つの Microsoft ベンダー マップとベンダー マクロについて説明します。 スキーマの残りの部分の詳細については、公式な CMake のドキュメントを参照してください。 これには、構成プリセット、ビルド プリセット、およびテスト プリセットに関する情報が含まれます。
Visual Studio で CMakePresets.json
を使用する方法の詳細については、「Visual Studio で CMake プリセットを使用して構成およびビルドする」を参照してください
Visual Studio Code で CMakePresets.json
を使用する方法の詳細については、「VS Code で CMake プリセットを使用して構成およびビルドする」を参照してください
Visual Studio 設定ベンダー マップ
ベンダー URI が microsoft.com/VisualStudioSettings/CMake/<version>
である 1 つのベンダー マップは、構成プリセットごとに許可され、Visual Studio と Visual Studio Code での CMake 統合に固有のオプションが含まれています。 ベンダー マップのすべてのオプションは、Visual Studio に適用されます。 Visual Studio と Visual Studio Code の両方に適用されるオプションは、明示的にマークされています。
Visual Studio 設定ベンダー マップのすべての設定はオプションであり、inherits
キーによって指定された構成プリセットから継承されます。 変更されたオプションのみがファイルに書き込まれます。 Visual Studio 設定ベンダー マップは、CMakePresets.json
と CMakeUserPresets.json
の両方でサポートされています。
Visual Studio 設定ベンダー マップのオプションは、CMake または CTest コマンド ラインの構築に影響しません。 そのため、同じ CMakePresets.json
ファイルを使用して、Visual Studio、Visual Studio Code、コマンド ラインから CMake を実行できます。 例外として、cacheRoot
および cmakeGenerateCommand
オプションが挙げられます。 これらのオプションは、Visual Studio の既存のキャッシュを開くシナリオに固有であり、コマンド ラインから再現することはできません。
設定 | 説明 |
---|---|
hostOS |
サポートされているオペレーティング システム (OS) の配列。 指定できる値は Windows 、Linux 、macOS です。hostOS の値は、Visual Studio と Visual Studio Code によって、ターゲット システムの OS に適用されない構成プリセットを非表示にし、より優れたユーザー エクスペリエンスを提供するために使用されます。hostOS が指定されていない場合、Visual Studio と Visual Studio Code には常に、すべての構成プリセットが選択するために表示されます。 このフィールドは、1 つの文字列を含む配列に相当する文字列にすることもできますこのオプションは、Visual Studio と Visual Studio Code の両方でサポートされています。 |
intelliSenseMode |
Visual Studio で IntelliSense 情報を計算するために使用されるモードを、<target>-<toolset>-<arch> という形式で指定します。 指定できる値: android-clang-arm android-clang-arm64 android-clang-x6 android-clang-x86 ios-clang-ar ios-clang-arm64 ios-clang-x6 ios-clang-x86 linux-gcc-arm linux-gcc-x64 linux-gcc-x86 windows-clang-arm windows-clang-arm64 windows-clang-x64 windows-clang-x86 windows-msvc-arm windows-msvc-arm64 windows-msvc-x64 windows-msvc-x86 intelliSenseMode が指定されていない場合は、指定したコンパイラとターゲット アーキテクチャに一致する IntelliSense モードが Visual Studio で使用されます。 intelliSenseMode は、クロスコンパイル用に強化された IntelliSense を提供するためによく使用されます。Visual Studio 2019 では、clang または clang-cl でビルドするときは、clang IntelliSense モードを明示的に指定する必要があります。 |
intelliSenseOptions |
追加の IntelliSense 構成オプションのマップ。useCompilerDefaults : IntelliSense でコンパイラの既定の defines と include のパスを使用するかどうかを指定する bool 。 使用中のコンパイラで GCC スタイルの引数がサポートされていない場合に限り、false にする必要があります。 既定値は true です。additionalCompilerArgs : Visual Studio で IntelliSense を制御するための追加オプションの配列。 このオプションではマクロ展開がサポートされます。 |
enableMicrosoftCodeAnalysis |
cl または clang-cl を使用してビルドするときに、Visual Studio 内で Microsoft コード分析を有効にする bool 。 既定値は false です。 |
codeAnalysisRuleset |
Visual Studio で Microsoft コード分析を実行するときに使用するルールセットを指定します。 ルールセット ファイルのパス、または Visual Studio と共にインストールされたルールセット ファイルの名前を使用できます。 このオプションではマクロ展開がサポートされます。 |
disableExternalAnalysis |
Visual Studio の外部ヘッダーでコード分析を実行するかどうかを指定する bool 。 |
codeAnalysisExternalRuleset |
Visual Studio で外部ヘッダーの Microsoft コード分析を実行するときに使用するルールセットを指定します。 ルールセット ファイルのパス、または Visual Studio と共にインストールされたルールセット ファイルの名前を使用できます。 このオプションではマクロ展開がサポートされます。 |
enableClangTidyCodeAnalysis |
clang-cl を使用してビルドするときに、Visual Studio 内で Clang-Tidy コード分析を有効にする bool。 既定値は false です。 |
clangTidyChecks |
Visual Studio で Clang-Tidy コード分析を実行するときに、Clang-Tidy に渡される警告のコンマ区切りリスト。 ワイルドカードを使用でき、- プレフィックスを指定するとチェックが削除されます。 |
cacheRoot |
CMake キャッシュへのパスを指定します。 このディレクトリには、既存の CMakeCache.txt ファイルが含まれている必要があります。 このキーは、Visual Studio の既存のキャッシュを開くシナリオでのみサポートされています。 このオプションではマクロ展開がサポートされます。 |
cmakeGenerateCommand |
CMake キャッシュを生成するためのコマンドライン ツール (コマンドライン プログラムと引数で指定します。例: gencache.bat debug )。 このコマンドは、CMake 構成が呼び出されると、指定されたプリセット環境を使用してシェルで実行されます。 このキーは、Visual Studio の既存のキャッシュを開くシナリオでのみサポートされています。 このオプションではマクロ展開がサポートされます。 |
Visual Studio リモート設定ベンダー マップ
ベンダー URI が microsoft.com/VisualStudioRemoteSettings/CMake/<version>
である 1 つのベンダー マップが、構成プリセットごとに許可され、Visual Studio でのリモート開発に固有のオプションが含まれています。 リモート開発とは、リモート SSH 接続または WSL で CMake を呼び出すことを意味します。 Visual Studio リモート設定ベンダー マップのどのオプションも、Visual Studio Code には適用されません。
Visual Studio リモート設定ベンダー マップのすべての設定はオプションであり、inherits
キーによって指定された構成プリセットから継承されます。 変更されたオプションのみがファイルに書き込まれます。 Visual Studio リモート設定ベンダー マップは、CMakePresets.json
と CMakeUserPresets.json
の両方でサポートされています。
Visual Studio 設定ベンダー マップのオプションは、CMake または CTest コマンド ラインの構築に影響しません。 そのため、同じ CMakePresets.json
ファイルを使用して、Visual Studio、Visual Studio Code、コマンド ラインから CMake を実行できます。
Visual Studio リモート設定ベンダー マップの多くのオプションは、WSL1 が対象のときは無視されます。 これは、WSL1 ツールセットではすべてのコマンドがローカルで実行され、WSL1 からローカル ソース ファイルにアクセスするために、/mnt
フォルダーの下にマウントされている Windows ドライブに依存しているためです。 ソース ファイルのコピーは必要ありません。 WSL1 を対象とする場合に無視されるオプションは、明示的にマークされています。
設定 | 説明 |
---|---|
sourceDir |
プロジェクトがコピーされるリモート システム上のディレクトリへのパス。 既定値は $env{HOME}/.vs/$ms{projectDirName} です。 このオプションではマクロ展開がサポートされます。リモート コピーのシナリオでは、マクロ ${sourceDir} によって、Windows コンピューター上のプロジェクト ソース ディレクトリではなく、リモート システム上のプロジェクト ソース ディレクトリに評価されます。 リモート コピーのシナリオには、リモート SSH 接続のターゲット設定が含まれます。 このような場合、リモート システム上のプロジェクト ソース ディレクトリは、Visual Studio リモート設定ベンダー マップの sourceDir の値によって決定されます。 対象が WSL1 の場合、このオプションは無視されます。 |
copySources |
true の場合、Visual Studio によって Windows からリモート システムにソースがコピーされます。 自分でファイルの同期を管理する場合は、false に設定します。 既定値は true です。 対象が WSL1 の場合、このオプションは無視されます。 |
copySourcesOptions |
Windows からリモート システムへのソース コピーに関連するオプションのオブジェクト。 対象が WSL1 の場合、このオブジェクトは無視されます。copySourcesOptions.exclusionList : ソース ファイルをリモート システムにコピーするときに除外するパスの一覧。 パスには、ファイルまたはディレクトリの名前、またはコピーのルートからの相対パスを指定できます。 既定値は [ ".vs", ".git", "out" ] です。 このオプションではマクロ展開がサポートされます。copySourcesOptions.method : ソース ファイルをリモート システムにコピーするために使用される方法。 指定できる値は、rsync と sftp です。 既定値は rsync です。copySourcesOptions.concurrentCopies : ソースからリモート システムへの同期中に使用される同時コピー数。 既定値は 5 です。copySourcesOptions.outputVerbosity : リモート システムへのソース コピー操作の詳細レベル。 指定できるレベルは、Normal 、Verbose 、Diagnostic です。 既定値は Normal です。 |
rsyncCommandArgs |
rsync に渡すコマンドライン引数の一覧。 既定値は [ "-t", "--delete", "--delete-excluded" ] です。 このオプションはマクロ展開をサポートし、WSL1 が対象のときは無視されます。 |
copyBuildOutput |
リモート システムから Windows にビルドの出力をコピーして戻すかどうかを指定します。 既定値は false です。 対象が WSL1 の場合、このオプションは無視されます。 |
copyOptimizations |
ソース コピーの最適化に関連するオプションのオブジェクト。 WSL1 が対象のときは、これらのオプションは無視されます。copyOptimizations.maxSmallChange : rsync の代わりに sftp を使用してコピーするファイルの最大数。 既定値は 10 です。copyOptimizations.useOptimizations : 使用されるコピーの最適化を指定します。 指定できる値は、コピー最適化なし (None )、rsync のみの最適化 (RsyncOnly )、または rsync と sftp の最適化 (RsyncAndSftp ) です。 既定値は RsyncAndSftp です。copyOptimizations.rsyncSingleDirectoryCommandArgs : 1 つのディレクトリの内容をリモート システムにコピーするときに rsync に渡されるコマンドライン引数の一覧。 既定値は [ "-t", "-d" ] です。 このオプションではマクロ展開がサポートされます。 |
copyAdditionalIncludeDirectoriesList |
IntelliSense 用にローカルにコピーされるリモート ヘッダー ディレクトリへのパスのリスト。 このオプションではマクロ展開がサポートされます。 |
copyExcludeDirectoriesList |
IntelliSense 用にローカルにコピーされないリモート ヘッダー ディレクトリへのパスのリスト。 このオプションではマクロ展開がサポートされます。 |
forceWSL1Toolset |
true の場合、Visual Studio から WSL を対象とするときは常に、WSL1 ツールセットが Visual Studio で使用されます。 WSL1 ツールセットによってすべてのコマンドがローカルで実行され、WSL からローカル ソース ファイルへのアクセスは、/mnt フォルダーの下にマウントされている Windows ドライブに依存して行われます。 これらのオプションは、WSL2 では速度が低下する可能性があります。 既定値は false です。Visual Studio 2019 バージョン 16.10 では、WSL1 ツールセットが常に使用されます。 このオプションは、WSL2 のネイティブ サポートが利用可能になった後に関連します。 |
リモートのビルド前およびビルド後のイベント
remotePrebuildEvent
と remotePostbuildEvent
のオプションは、CMakePresets.json
の導入に伴い非推奨になっています。
ビルド前、リンク前、ビルド後の各イベントを CMakeLists.txt
にエンコードするには、add_custom_command
を使用します。 これにより、Visual Studio でのビルドとコマンド ラインからのビルドで、同じ動作が保証されます。
Visual Studio に固有の動作が必要な場合は、tasks.vs.json
でカスタム リモート タスクを追加できます。 始めるには、ソリューション エクスプローラーのフォルダー ビューでルート CMakeLists.txt
を右クリックし、[タスクの構成] を選択します。 その後、tasks.vs.json
ファイルに新しいリモート タスクを追加することができます。
次のリモート タスクにより、リモート Linux システム上に test という名前のディレクトリが作成されます。
{
"taskLabel": "mkdir",
"appliesTo": "CMakeLists.txt",
"type": "remote",
"command": "mkdir test",
"remoteMachineName": "localhost"
}
任意の CMakeLists.txt
を右クリックし、mkdir オプションを選択してこのタスクを実行します。
remoteMachineName
の値は、接続マネージャーでの接続のホスト名と一致している必要があります。
Microsoft ベンダー マクロ
2 つの Microsoft ベンダー マップ Visual Studio Settings
と Visual Studio Remote Settings
により、CMake で定義されたすべてのマクロがサポートされます。 Microsoft のベンダー マップでは、CMake で定義されたすべてのマクロがサポートされます。 詳細については、cmake-presets のマクロ展開に関するページを参照してください。 すべてのマクロと環境変数は、CMake に渡される前に展開されます。
Visual Studio により、プレフィックス ms
の付いたベンダー マクロがサポートされています。 Microsoft ベンダー マクロは、Microsoft ベンダー マップでのみ使用できます。 ベンダー マップに含まれないベンダー マクロを使用するプリセットは、CMake で使用できません。
マクロ | 説明 |
---|---|
$ms{projectDirName} |
Visual Studio で開いているフォルダーの名前に評価されます。 このマクロは、リモート コピーのシナリオで sourceDir の既定値を設定するために使用されます。 このマクロは、Visual Studio Code ではサポートされていません。 代わりに ${sourceDirName} を使用してください |
環境変数
マクロ | 説明 |
---|---|
$env{<variable-name>} $penv{<variable-name>} |
CMake によってサポートされている、この構文を使用する環境変数を参照します。 詳細については、cmake-presets のマクロ展開に関するページを参照してください。 |
非推奨のマクロ
CMakeSettings.json
でサポートされていたいくつかのマクロは、CMakePresets.json
の導入により非推奨になりました。
ファイル パスを作成するには、CMake でサポートされているマクロを使用してください。 そのマクロを使用すると、Visual Studio 内とコマンド ラインで、同じ CMakePresets.json
ファイルが動作することが保証されます。
非推奨のマクロ | 推奨事項 |
---|---|
${projectFile} |
${sourceDir}/CMakeLists.txt |
${thisFile} |
${sourceDir}/CMakePresets.json |
使用できるシェル構文
Microsoft ベンダー マップで Linux パスを作成するとき、$HOME
を参照するには $env{HOME}
構文を使用します。