web-dev-qa-db-ja.com

Visual Studio Code:IntelliSenseの結果を改善するためにincludePathを構成する方法

私はVisual Studio Codeを使用する完全な初心者であり、自分が何をしているのかわかりません。私は周りを検索しました(おそらく十分ではありません)が、行の横にある黄色の電球をクリックするたびにリダイレクトされるc_cpp_properties.jsonファイルを構成する方法について、私のような人のための簡単な説明を見つけることができません緑色の波線で下線が引かれています。

電球の例

c_cpp_properties.json

IntelliSenseを適切に動作させるために.jsonに何を入れるかを知りたい

9
Niko P.

From: https://code.visualstudio.com/docs/languages/cpp

以下では、MinGW C++インクルードパスがWindowsのbrowse.pathに追加されていることがわかります。

{
"name": "Win32",
"includePath": [
    "${workspaceRoot}"
],
"defines": [
    "_DEBUG",
    "UNICODE"
],
"intelliSenseMode": "msvc-x64",
"browse": {
    "path": [
        "${workspaceRoot}",
        "C:\\MinGW\\lib\\gcc\\mingw32\\6.3.0\\include\\c++"
    ],
    "limitSymbolsToIncludedHeaders": true,
    "databaseFilename": ""
    }
}

お役に立てば幸いです! :)

4
Oliver Whittlef

C/C++拡張機能の公式ドキュメントから:

IntelliSenseの結果を改善するためのincludePathの構成

VS Codeでフォルダーを開くときに次のメッセージが表示される場合は、C++ IntelliSenseエンジンがインクルードファイルのあるパスに関する追加情報を必要としていることを意味します。

Configure includePath for better IntelliSense

インクルードパスはどこで定義されていますか?

インクルードパスは、開かれたフォルダーの.vscodeディレクトリにあるc_cpp_properties.jsonというファイルの"includePath"設定で定義されます。

このファイルを作成または開くには、コマンドパレットで"C/Cpp: Edit Configurations"コマンドを使用するか、電球メニューで"Edit "includePath" setting"を選択します(下のスクリーンショットを参照)。電球を見つける最も簡単な方法は、ソースファイルの一番上までスクロールし、#includeステートメントの下に表示される緑色の波線をクリックすることです。

lightbulb menu "Edit "includePath" setting"

フォルダーが開かれると、拡張機能はオペレーティングシステムに基づいてシステムヘッダーを見つけようとしますが、プロジェクトが依存する他のライブラリについては認識しません。緑の波線の上にマウスを移動するか、[問題]ウィンドウを開いて、IntelliSenseエンジンが開くことができないヘッダーを確認できます-場合によっては、見つけることができない依存ヘッダーがあります。

include error message

インクルードパスの指定方法

以下に説明する手法のいずれかを使用して、残りのパスを指定できます。

1. compile_commands.jsonファイルを使用してincludePathsを提供し、情報を定義します

この拡張機能は、compake_commands.jsonファイルから"includePath"および"defines"の情報を取得できます。これらのファイルは、CMakeやNinjaなどの多くのビルドシステムで自動生成できます。現在の構成が定義されているセクションを探し(デフォルトでは、OSごとに1つの構成(「Win32」や「Mac」など))、c_cpp_properties.json"compileCommands"プロパティを設定しますcompile_commands.jsonファイルへのフルパスと拡張機能は、IntelliSenseの"includes"および"defines"プロパティの代わりにそれを使用します。

use compileCommands setting

2.電球の候補を使用して、includePathを自動解決します

最初に試すことは、電球パスの提案を活用して、インクルードパスを自動解決することです。フォルダーを開くと、拡張機能はrecursivelyc_cpp_propertiesの"browse.path"設定で設定されたパスに基づいて、コードが使用しているヘッダーファイルに一致する潜在的なインクルードパスを検索します。 .json。 #include文の下にある緑色の波線をクリックすると、IntelliSenseがインクルードファイルを解決できるようにするパスの提案を提供する電球が表示されます。

lightbulb suggestions

電球にパスの候補が表示されない場合は、ヘッダーが存在する可能性があるルートフォルダーをc_cpp_properties.json"browse.path"設定に追加してみてください。これにより、拡張機能は再帰的にこれらのフォルダー内を検索し、検索プロセスが進むにつれて電球にさらに候補を表示できます。

3.インクルードパスを手動で追加する

上記のいずれでもパスが完全に解決されない場合、プロジェクトが依存するヘッダーへのパスをc_cpp_properties.jsonファイルで手動で指定できます。現在の構成が定義されているセクションを探し(デフォルトではOSごとに1つの構成(「Win32またはMac」など)があります)。"includePath"設定にパスを追加し、"defines"で定義しますたとえば、次のスクリーンショットは、Mac構成のパスを指定するファイルのスニペットを示しています。

また、MinGWの場合、 拡張機能のドキュメントで説明されているように 独自のインクルードファイルをリストするようにgcc/g ++に依頼できます。

gcc -v -E -x c++ nul

c_cpp_properties file snippet

インクルードパスが正しく解決されていることを確認します

インクルードパスが正しく解決されたことを確認するには、2つの方法があります。

  1. ソースファイルの緑の波線は表示されなくなりました
  2. エラーウィンドウの[問題]ウィンドウでクリアされます。

これは、IntelliSenseエンジンがインクルードパスを解決したことを示しているため、現在の翻訳単位のCまたはC++コードの完全なIntelliSenseを楽しむことができます。追加のインクルードパスを設定する必要がある別の翻訳単位に属している場合、他のファイルでエラーが表示される場合があります。

これで問題が解決しなかった場合は、以下のMinGWの設定を確認し、それぞれ/類似のヘッダーファイルとフォルダーのCygwinインストールの適切な場所を設定してみてください。

MinGWの設定

c_cpp_properties.jsonリファレンスガイド

1