"Default"
intellisenseエンジンを使用すると、C++プロジェクトの一部のシンボルを解決できません。それは、それらが#ifdef
によって保護されているヘッダー内にあるためであり、これは、メイクファイルによって-D
フラグでgccに渡されたマクロに依存します。ヘッダーのそれらの部分をコンパイルできるように、これらの定義についてインテリセンスエンジンにどのように伝えることができますか?
プロジェクトのメイクファイルdefines
は_.vscode/c_cpp_properties.json
_に設定されています。
_"configurations": [
{
...
"defines":[
"MYSYMBOL",
"MYVALUE=1"
]
}
], ...
_
_c_cpp_properties.json
_を開く方法は次のとおりです。
インテリセンスが解決できないincludeステートメントのようなものに緑の波線を見つけます。カーソルを合わせて、表示される電球をクリックします(これは非常に小さく、少しゲームをクリックするだけです)。エディターでプロジェクト構成ファイルを開きます。
上記と同じですが、緑色の波線にカーソルを合わせ、Ctrl
+ _.
_を押します。
コマンドパレットを使用してください:ctrl
+ shift
+ P
、次にC/C++: Edit configurations (JSON)
を選択します。
ファイルが.vscodeフォルダーに既に存在する場合は、File
-> Open
で開きます。
_c_cpp_properties.json
_が変更された後、vscodeは設定を再処理しますが、値を変更するときに再起動が必要になることがあります。
ここには基本的で不完全な情報があります: https://code.visualstudio.com/docs/languages/cpp
これは_c_cpp_properties.json
_ファイル自体に関する適切なリンクです: https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference
この機能が追加されました: https://github.com/Microsoft/vscode-cpptools/issues/304
c_cpp_properties.jsonファイルで「defines」を設定できます
これまでの他の回答には、簡単に修正できない2つの問題があります。
ソースファイルごとに異なるコンパイラフラグが必要になる場合があります。
必要なコンパイラフラグを手動で見つけて手動で追加するのは、非常に面倒な作業です。
さいわい、VS CodeのC/C++拡張機能は、compile_commands.jsonデータベースをサポートしています。これには、定義、インクルードディレクトリ、その他のコンパイラコマンドラインフラグなど、個々のソースファイルに固有の情報が格納されます。生成してVSコードを取得して使用する方法の詳細な説明をここに投稿しました https://stackoverflow.com/a/59618515/12663912