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
:true
に設定すると、c_cpp_properties.json
ファイルで検出されたエラーを C++ 拡張機能に報告します。
構成プロパティ
-
name
: 構成を識別するための分かりやすい名前です。Linux
、Mac
、およびWin32
は、これらのプラットフォームで自動選択される構成の特別な識別子です。VS Code のステータス バーには、どの構成がアクティブであるかが表示されます。ステータス バーのラベルを選択して、アクティブな構成を変更することもできます。 -
compilerPath
: プロジェクトのビルドに使用するコンパイラのフル パス (例:/usr/bin/gcc
) で、より正確な IntelliSense を有効にします。拡張機能はコンパイラに問い合わせて、IntelliSense に使用するシステムのインクルード パスと既定の define を決定します。"compilerPath": ""
(空の文字列) を設定すると、コンパイラへの問い合わせをスキップします。これは、使用したいコンパイラが問い合わせに使用される引数をサポートしていない場合に便利です。その場合、拡張機能は (MSVC のように) 見つけられるサポート対象のコンパイラを既定として使用します。compilerPath
プロパティを省略した場合は、問い合わせはスキップされません。 -
compilerArgs
: インクルード パスや define を変更するためのコンパイラ引数 (例:-nostdinc++
,-m32
など)。スペースで区切られた追加の引数を取る引数は、配列内で別々の引数として入力する必要があります。例えば、--sysroot <arg>
の場合は\"--sysroot\", \"<arg>\"
を使用します。 -
intelliSenseMode
: 使用する IntelliSense モードで、MSVC、gcc、または Clang のアーキテクチャ固有のバリアントにマッピングされます。設定されていない場合、または${default}
に設定されている場合、拡張機能はそのプラットフォームの既定を選択します。プラットフォームの既定値
- Windows:
windows-msvc-x64
- Linux:
linux-gcc-x64
- macOS:
macos-clang-x64
<compiler>-<architecture>
のバリアント (例:gcc-x64
) のみを指定する IntelliSense モードは、レガシー モードであり、ホスト プラットフォームに基づいて自動的に<platform>-<compiler>-<architecture>
のバリアントに変換されます。 - Windows:
-
includePath
: インクルード パスとは、ソース ファイルによってインクルードされるヘッダー ファイルのディレクトリです。たとえば、ソース ファイルに#include "myHeaderFile.h"
というインクルード ディレクティブが含まれている場合、このヘッダー ファイルのパスをincludePath
に追加します。インクルードされるヘッダー ファイルを検索する際に IntelliSense エンジンが使用するパスのリストを指定します。これらのパスの検索は再帰的ではありません。再帰的な検索を示すには、パスの末尾に/**
を指定します。たとえば、${workspaceFolder}/**
はすべてのサブディレクトリを検索しますが、${workspaceFolder}
は検索しません。Visual Studio がインストールされている Windows を使用している場合、またはcompilerPath
設定でコンパイラが指定されている場合、システムのインクルード パスはここにリストすべきではありません。 -
defines
: ファイルの解析中に IntelliSense エンジンが使用するプリプロセッサ定義のリストです。オプションで=
を使用して値を設定できます (例:VERSION=1
)。 -
cStandard
: IntelliSense に使用する C 言語標準のバージョンです。例:c17
、gnu23
、または${default}
。注: GNU 標準は、設定されたコンパイラに問い合わせて GNU define を取得するためにのみ使用され、IntelliSense は同等の C 標準バージョンをエミュレートします。 -
cppStandard
: IntelliSense に使用する C++ 言語標準のバージョンです。例:c++20
、gnu++23
、または${default}
。注: GNU 標準は、設定されたコンパイラに問い合わせて GNU define を取得するためにのみ使用され、IntelliSense は同等の C++ 標準バージョンをエミュレートします。 -
configurationProvider
: ソース ファイルの IntelliSense 構成情報を提供できる VS Code 拡張機能の ID です。たとえば、CMake Tools 拡張機能から構成情報を提供するには、VS Code 拡張機能 IDms-vscode.cmake-tools
を使用します。configurationProvider
を指定した場合、それが提供する構成はc_cpp_properties.json
の他の設定よりも優先されます。configurationProvider
の候補となる拡張機能は、vscode-cpptools-api を実装している必要があります。 -
mergeConfigurations
:true
に設定すると、インクルード パス、define、および強制インクルードを、構成プロバイダーからのものとマージします。 -
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 システムは、プロジェクトのビルドに必要なすべての define を含むファイルを生成します。Kconfig システムを使用するプロジェクトの例には、Linux Kernel や NuttX RTOS があります。 -
customConfigurationVariables
:launch.json
やtasks.json
の入力変数として使用するために、コマンド${cpptools:activeConfigCustomVariable}
を通じてクエリできるカスタム変数です。 -
browse
: コードベース内のすべてのシンボルを識別するために IntelliSense と共に使用されるプロパティのセットです。これらのプロパティは、[定義へ移動]/[宣言へ移動]、グローバル シンボル検索などの機能、または「既定」の IntelliSense エンジンがソース ファイルの#includes
を解決できない場合に使用されます。 -
recursiveIncludes
: 再帰検索を指定するincludePath
エントリを拡張機能がどのように処理するかを構成するために使用されるプロパティのセットです。
Browse プロパティ
-
path
: グローバル シンボル検索で使用するためにソース ファイルが解析されるパスのリストです。省略された場合、includePath
がpath
として使用されます。これらのパスの検索は既定で再帰的です。非再帰的な検索を示すには*
を指定します。たとえば、${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.json
で、c_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
フラグを使用してシステム ヘッダーを指定する方が、ほとんどのシナリオでより良い解決策です。