web-dev-qa-db-ja.com

vscode "#includeエラーが検出されました。includePathを更新してください

Arduinoでvscodeを使用しようとしていますが、成功しません。問題はライブラリパスにあるようです。しかし、私はそれを修正することができませんでした!私はLinuxを使用しています。

"message": "#include errors detected. Please update your includePath. IntelliSense features for this translation unit (/home/harold/Arduino/Saaf_Curing/Saaf_Curing.ino) will be provided by the Tag Parser.",

IncludePathを見つける方法がわかりません。 vscodeで提供されたアドバイスを行うことができません。

複雑に見えるので、vs codeはまったく正しい方向かどうか疑問に思いますか?

4
harold

質問はArduinoに言及していますが、以下の提案は基本的にVSCodeが「includePathを更新する」ように指示するときはいつでも適用されます。

IncludePathとは何ですか?

includePathc_cpp_settings.jsonの属性であり、VSCodeで[ファイル]→[フォルダーを開く]を使用して開いたメインフォルダーの.vscodeフォルダーにあります。

c_cpp_settings.jsonを直接編集できますが、通常は「C/C++構成GUI」を使用する方が簡単です。これを行うには、コマンドパレット(Ctrl + Shift + P)を開き、「C/C++:構成の編集(UI)」を実行します。次に、「パスを含める」設定を探します。

includePathは、VSCode(具体的には、 C/C++拡張機能 のIntelliSenseコンポーネント)に、#include "filename"ディレクティブを解決するときにどこを探すかを指示します。これにより、VSCodeはそれらのファイルで定義されたシンボルの定義を見ることができます。

それで、VSCodeが私に言うとき、私はincludePathをいじるべきですか?

最初はありません!インクルードパスを変更する前に、まだ行っていない場合は、まず「コンパイラパス」をC/C++コンパイラを指すように設定し、「IntelliSenseモード」をコンパイラにできるだけ一致するように設定します。

また、特にコンパイラが複数のターゲット(32ビットコードと64ビットコードの両方)のコードを生成できる場合は、コンパイラの引数を調整する必要がある場合があります。 (それが何を意味するのかわからない場合は、最初はスキップしてください。)

次に、コマンドパレットで、「C/C++:ログ診断」を実行します。出力には、VSCodeが検出したコンパイラーと、組み込みのインクルードパスおよびプリプロセッサー定義として検出されたものが表示されます。

次に、シェルで次のコマンドを実行します。

  $ touch empty.c
  $ gcc -v -E -dD empty.c

ここでは、コンパイラとしてgccを使用していると仮定しました。そうでない場合は、実際のコンパイラコマンド名に置き換えてください。コンパイラが [〜#〜] gcc [〜#〜] のバリアントでない場合(たとえば、Microsoft cl.exeコンパイラを使用している場合)、そのコンパイラを確認する必要があります。事前定義されたマクロを出力し、パスを含むスイッチを見つけるためのドキュメントまたはGoogle(たとえば、cl.exeについては ここ を参照)。

上記のコマンドの出力を、VSCodeがC/C++診断出力に表示するものと比較します。うまくいけば、それらは非常に似ています。そうでない場合は、コンパイラパス、IntelliSenseモード、またはコンパイラ引数を調整してみてください。これらの3つの設定だけを調整して、可能な限り近づけたら、次の手順に進みます。

必要に応じてincludePathを調整します

コンパイラの組み込み構成とVSCodeが検出するものとの間にまだ大きな違いがある場合は、(C/C++設定UIで)インクルードパス、定義、およびC/C++標準フィールドを変更して修正します。 C/C++ Log Diagnosticsコマンドを再実行して、効果を確認します。

おそらく、事前定義されたすべてのプリプロセッサシンボルを追加する必要はありません。これは、それらに依存する #ifdef ディレクティブがあり、VSCodeが間違ったコードをアクティブとして認識している場合にのみ問題になります。コードを参照しているときに、VSCodeが間違っているという特定のケースが見られる場合にのみ、事前定義されたシンボルを追加することをお勧めします。

最後に、コンパイラがデフォルトで検索しない場所にプロジェクトのヘッダーファイルがある場合、つまり、通常はコンパイラのコマンドラインで -I スイッチを渡す必要がある場合は、それらも追加します。インクルードパスへ。同じことが -D 引数にも当てはまり、Defineに追加する必要があります。

3
Scott McPeak

これは、初期化時に拡張機能に一部のインクルードパスがないためです

不足している行をc_cpp_properties.jsonに追加します

"includePath": [
"<arduino ide installation folder>\\tools\\**",
"<arduino ide installation folder>\\hardware\\arduino\\avr\\**",
"<arduino ide installation folder>\\hardware\\tools\\**",
"<arduino ide installation folder>\\hardware\\arduino\\avr\\cores\\arduino"
]

また、「構成」の下に"defines": [ "USBCON" ]を追加して、シリアルクラスがインテリセンスで機能するようにします。

0
C.H.