に参加して、VS Code の AI 支援開発について学びましょう。

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: 標準の環境変数構文 ${} または ${env:} を介して構成内で置換可能な、ユーザー定義変数の配列。文字列と文字列の配列が受け入れられます。

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

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

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

構成プロパティ

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

  • compilerPath: プロジェクトのビルドに使用するコンパイラへの完全パス (例: /usr/bin/gcc)。これにより、より正確な IntelliSense が可能になります。拡張機能はコンパイラを照会し、IntelliSense に使用するシステムインクルードパスとデフォルトの定義を決定します。

    "compilerPath": "" (空の文字列) を設定すると、コンパイラの照会はスキップされます。これは、優先するコンパイラが照会に使用される引数をサポートしない場合に便利です。この場合、拡張機能は、検出できるサポートされているコンパイラ (MSVC など) をデフォルトで使用します。compilerPath プロパティを省略しても照会はスキップされません。

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

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

    プラットフォームのデフォルト

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

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

  • 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: Mac フレームワークからのインクルードヘッダーを検索する際に IntelliSense エンジンが使用するパスのリスト。

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

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

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

  • customConfigurationVariables: ${cpptools:activeConfigCustomVariable} コマンドを介して照会できるカスタム変数。これらは launch.json または tasks.json の入力変数として使用できます。

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

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

参照プロパティ

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

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

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

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

  • reduce: 再帰的な includePath エントリを展開すると、ソースファイル内の #include ステートメントを解決する際に IntelliSense が処理する非常に大きなインクルードパスのセットになる可能性があります。大量のインクルードパスを 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 フラグを使用してシステムヘッダーを指定することをお勧めします。これはほとんどのシナリオでより良い解決策です。

© . This site is unofficial and not affiliated with Microsoft.