VS Codeのエージェントモードを拡張するには、を試してください!

C++ 拡張機能設定のリファレンス

C++ 拡張機能の設定は高度に構成可能です。この記事では、c_cpp_properties.json ファイルのスキーマについて説明します。VS Code の設定に関する一般的な情報については、「設定の構成」と「変数リファレンス」および「既定の VS Code 設定」を参照してください。

C++ プロジェクトの設定を開始したいですか?まずは「IntelliSense の構成」から始めてください。

変数の例

以下の JSON スニペットは、c_cpp_properties.json の構成例です。JSON ファイルには関連する変数のみを含める必要があり、不足しているフィールドは C++ 拡張機能によって既定値で補完されます。

{
  "env": {
    "myIncludePath": ["${workspaceFolder}/include", "${workspaceFolder}/src"],
    "myDefines": ["DEBUG", "MY_FEATURE=1"]
  },
  "configurations": [
    {
      "name": "Mac",
      "compilerPath": "/usr/bin/clang++",
      "intelliSenseMode": "macos-clang-x64",
      "includePath": ["${myIncludePath}", "${workspaceFolder}/**"],
      "defines": ["${myDefines}"],
      "cStandard": "c17",
      "cppStandard": "c++20",
      "macFrameworkPath": ["/System/Library/Frameworks", "/Library/Frameworks"],
      "browse": {
        "path": ["${myIncludePath}", "${workspaceFolder}"]
      }
    }
  ],
  "version": 4,
  "enableConfigurationSquiggles": true
}

トップレベルのプロパティ

  • env: 構成で標準の環境変数構文 ${<var>} または ${env:<var>} を介して置換に利用できる、ユーザー定義変数の配列です。文字列と文字列の配列が受け入れられます。

  • configurations: IntelliSense エンジンにプロジェクトと設定に関する情報を提供する構成オブジェクトの配列です。既定では、拡張機能はオペレーティングシステムに基づいて構成を作成します。さらに構成を追加することもできます。

  • version: このフィールドは編集しないことをお勧めします。これは c_cpp_properties.json ファイルの現在のバージョンを追跡し、拡張機能がどのプロパティと設定が存在すべきか、このファイルを最新バージョンにアップグレードする方法を認識できるようにします。

  • enableConfigurationSquiggles: c_cpp_properties.json ファイルで検出されたエラーを C++ 拡張機能に報告するには、true に設定します。

構成プロパティ

  • name: 構成を識別するユーザーフレンドリーな名前です。LinuxMac、および Win32 は、これらのプラットフォームで自動選択される構成の特別な識別子です。VS Code のステータスバーには、現在アクティブな構成が表示されます。ステータスバーのラベルを選択して、アクティブな構成を変更することもできます。

  • compilerPath: より正確な IntelliSense を有効にするために、プロジェクトのビルドに使用するコンパイラの完全なパスです (例: /usr/bin/gcc)。拡張機能はコンパイラに問い合わせて、IntelliSense に使用するシステムインクルードパスと既定の定義を決定します。

    "compilerPath": "" (空文字列) を設定すると、コンパイラへの問い合わせがスキップされます。これは、優先するコンパイラが問い合わせに使用される引数をサポートしていない場合に役立ちます。拡張機能は、見つけられるサポートされているコンパイラ (MSVC など) を既定で使用するためです。compilerPath プロパティを省略しても、問い合わせはスキップされません。

  • compilerArgs: 使用されるインクルードパスまたは定義を変更するためのコンパイラ引数です (例: -nostdinc++-m32 など)。スペースで区切られた追加の引数を受け取る引数は、配列内で個別の引数として入力する必要があります。たとえば、--sysroot <arg> の場合は \"--sysroot\", \"<arg>\" を使用します。

  • intelliSenseMode: MSVC、gcc、または Clang のアーキテクチャ固有のバリアントにマッピングされる IntelliSense モードです。設定されていない場合、または ${default} に設定されている場合、拡張機能はそのプラットフォームの既定値を選択します。

    プラットフォームの既定値

    • Windows: windows-msvc-x64
    • Linux: linux-gcc-x64
    • macOS: macos-clang-x64

    <compiler>-<architecture> バリアント (例: gcc-x64) のみを指定する IntelliSense モードはレガシーモードであり、ホストプラットフォームに基づいて自動的に <platform>-<compiler>-<architecture> バリアントに変換されます。

  • includePath: インクルードパスは、ソースファイルによってインクルードされるヘッダーファイルのディレクトリです。たとえば、ソースファイルに #include "myHeaderFile.h" というインクルードディレクティブが含まれている場合、このヘッダーファイルのパスを includePath に追加します。IntelliSense エンジンがインクルードされたヘッダーファイルを検索する際に使用するパスのリストを指定します。これらのパスの検索は再帰的ではありません。再帰検索を示すには、パスの末尾に /** を指定します。たとえば、${workspaceFolder}/** はすべてのサブディレクトリを検索しますが、${workspaceFolder} は検索しません。Visual Studio がインストールされている Windows 上にいる場合、または compilerPath 設定でコンパイラが指定されている場合、システムインクルードパスをここにリストする必要はありません。

  • defines: ファイルを解析する際に IntelliSense エンジンが使用するプリプロセッサ定義のリストです。オプションで、= を使用して値を設定できます (例: VERSION=1)。

  • cStandard: IntelliSense に使用する C 言語標準のバージョンです。たとえば、c17gnu23、または ${default} です。注: GNU 標準は、設定されたコンパイラに問い合わせて GNU 定義を取得するためにのみ使用され、IntelliSense は同等の C 標準バージョンをエミュレートします。

  • cppStandard: IntelliSense に使用する C++ 言語標準のバージョンです。たとえば、c++20gnu++23、または ${default} です。注: GNU 標準は、設定されたコンパイラに問い合わせて GNU 定義を取得するためにのみ使用され、IntelliSense は同等の C++ 標準バージョンをエミュレートします。

  • configurationProvider: ソースファイルの IntelliSense 構成情報を提供できる VS Code 拡張機能の ID です。たとえば、VS Code 拡張機能 ID ms-vscode.cmake-tools を使用して、CMake Tools 拡張機能から構成情報を提供します。configurationProvider を指定した場合、それが提供する構成は c_cpp_properties.json の他の設定よりも優先されます。

    configurationProvider の候補となる拡張機能は、vscode-cpptools-api を実装している必要があります。

  • mergeConfigurations: インクルードパス、定義、および強制インクルードを構成プロバイダーからのものとマージするには、true に設定します。

  • windowsSdkVersion: Windows で使用する Windows SDK インクルードパスのバージョンです (例: 10.0.17134.0)。

  • macFrameworkPath: IntelliSense エンジンが Mac フレームワークからインクルードされたヘッダーを検索する際に使用するパスのリストです。

  • forcedInclude: ソースファイル内のテキストが処理される前にインクルードされるべきファイルのリストです。ファイルはリストされた順序でインクルードされます。

  • compileCommands: ワークスペースの compile_commands.json ファイルへの完全なパスを含むパスの配列です。エディターで開いているファイルに対して compile_commands.json に一致するエントリがある場合、c_cpp_properties.json の他のフィールドの代わりに、そのコマンドラインがそのファイルの IntelliSense を構成するために使用されます。ファイル形式の詳細については、Clang ドキュメントを参照してください。CMake などの一部のビルドシステムは、このファイルの生成を簡素化します

  • dotConfig: Kconfig システムによって作成される .config ファイルへのパスです。Kconfig システムは、プロジェクトのビルドに必要なすべての定義を含むファイルを生成します。Kconfig システムを使用するプロジェクトの例としては、Linux カーネルと NuttX RTOS があります。

  • customConfigurationVariables: launch.json または tasks.json の入力変数として使用するために、コマンド ${cpptools:activeConfigCustomVariable} を介してクエリできるカスタム変数です。

  • browse: コードベース内のすべてのシンボルを識別するために IntelliSense と組み合わせて使用されるプロパティのセットです。これらのプロパティは、定義へ移動/宣言へ移動、グローバルシンボル検索、または「既定の」IntelliSense エンジンがソースファイル内の #includes を解決できない場合などの機能で使用されます。

  • recursiveIncludes: 再帰検索を指定する includePath エントリを拡張機能がどのように処理するかを構成するために使用されるプロパティのセットです。

ブラウズプロパティ

  • path: グローバルシンボル検索で使用するためにソースファイルが解析されるパスのリストです。省略された場合、includePathpath として使用されます。これらのパスの検索は既定で再帰的です。非再帰検索を示すには * を指定します。たとえば、${workspaceFolder} はすべてのサブディレクトリを検索しますが、${workspaceFolder}/* は検索しません。

  • limitSymbolsToIncludedHeaders: true の場合、タグパーサーは ${workspaceFolder} 内のソースファイルによって直接的または間接的にインクルードされているヘッダーファイルのみを解析します。false の場合、タグパーサーは browse.path リストで指定されたパスに見つかったすべてのコードファイルを解析します。

  • databaseFilename: 生成されたシンボルデータベースへのパスです。このプロパティは、ワークスペースの既定のストレージ場所とは別の場所にワークスペースシンボルデータベースを保存するよう拡張機能に指示します。相対パスが指定された場合、ワークスペースフォルダ自体ではなく、ワークスペースの既定のストレージ場所に対して相対的になります。${workspaceFolder} 変数を使用して、ワークスペースフォルダに対する相対パスを指定できます (例: ${workspaceFolder}/.vscode/browse.vc.db)。

再帰インクルードプロパティ

  • reduce: 再帰的な includePath エントリが展開されると、IntelliSense がソースファイル内の #include ステートメントを解決する際に処理するインクルードパスのセットが非常に大きくなる可能性があります。大量のインクルードパスを IntelliSense コンパイラに送信すると、一部のシステムで IntelliSense のパフォーマンスに影響を与える可能性があります。既定では、拡張機能は、まずソースファイルをタグ解析して #include ステートメントを検索し、どのインクルードパスが必要かを判断することで、インクルードパスのセットを可能な限り最小のセットに削減します。この削減プロセスは、この設定の always オプションと同じ動作です。この動作は、IntelliSense が後で高速化される可能性のある初期オーバーヘッドと引き換えに行われます。このプロパティを never に設定すると、インクルードパスの完全な再帰展開が IntelliSense プロセスに提供されます。事前にファイルを解析しないことで、この動作は、ソースファイルが開かれたときに IntelliSense がより迅速に起動できるように、後の潜在的なパフォーマンスと引き換えに行われます。一般に、構成内の再帰インクルードパスの数を減らすと、多数のパスが関与する場合に IntelliSense のパフォーマンスが向上する可能性があります。

  • priority: #include ステートメントを解決する際の再帰インクルードパス検索の優先順位です。beforeSystemIncludes に設定すると、再帰インクルードパスはシステムインクルードパスの前に検索されます。afterSystemIncludes に設定すると、再帰インクルードパスはシステムインクルードパスの後に検索されます。beforeSystemIncludes はコンパイラの検索順序をより正確に反映し、予測可能性を高めますが、afterSystemIncludes はパフォーマンスの向上につながる可能性があります。

  • order: 再帰インクルードのサブディレクトリが breadthFirst (幅優先) または depthFirst (深さ優先) のどちらで検索されるかです。

サポートされている変数

tasks.json または launch.jsonc_cpp_properties.json から現在アクティブな構成をクエリできるようにすることができます。これを行うには、tasks.json または launch.json スクリプトの引数として変数 ${command:cpptools.activeConfigName} を使用します。

既定の VS Code 設定

C_Cpp.default.includePath など、すべての既定の VS Code 設定は c_cpp_properties.json でサポートされています。唯一の例外は、

C_Cpp.default.systemIncludePath : string[]

この設定により、システムインクルードパスを通常のインクルードパスとは別に指定できます。しかし、C++ 拡張機能がコンパイラから受け取る選択されたシステムインクルードパスは、IntelliSense プロセスには渡されません。これは、標準的なコンパイラの動作を上書きするため、たとえばコンパイラがサポートされていない場合など、まれなシナリオでのみ使用されます。代わりに、compilerArgs 設定と -isystem フラグを使用してシステムヘッダーを指定する方が、ほとんどのシナリオでより良い解決策です。