2

問題文:

カスタムの場所にライブラリをインストールしましたが、コンパイルとリンケージは正常に機能しますが、clangd はカスタム ライブラリに関連するさまざまなエラーを報告しています。

私の Makefile には次のフラグがあります。

CFLAGS += -I/usr/local/share/mylib                             
LDFLAGS += -lmylib -L/usr/local/lib/
...
<snip>

ただし、clangd はヘッダー ファイルを見つける方法を認識していないため、エディターで次のような役に立たないエラーが表示されます。

#include <mylibheader.h>    'mylibheader.h' file not found

mylib_type1_t foo                     unknown type name 'mylib_type1_t'

...
<snip>

インターネットでエラーとキーワードclangd,clangd configを検索clangd .clang-formatしても、SO または他の場所で役立つものは何も生成されませんでした (したがって、この質問)。

質問は:

非標準ヘッダーの場所をclangdに伝えて、偽の「ファイルが見つかりません」という警告が表示されないようにするにはどうすればよいですか?

4

1 に答える 1

2

tl;dr:

(小さなプロジェクト)にコンパイル フラグを追加するcompile_flags.txtか、より複雑なプロジェクトを生成しcompile_commands.jsonます。こちらの手順を参照してください。

例: 私のcompile_flags.txt内容:

-I/usr/local/share/mylib
-lmylib
-L/usr/local/lib/

トラブルシューティング方法

man 1 clangd出力を検査するための有用なヒントを提供します

       --check[=<string>]                 - Parse one file in isolation instead of acting as a language server. Useful to investigate/reproduce crashes or configu‐
              ration problems. With --check=<filename>, attempts to parse a particular file.

のいくつかの出力clangd --check=src/main.c:

E[13:12:40.787] [pp_file_not_found] Line 10: 'mylibheader.h' file not found

E[13:12:40.820] [unknown_typename] Line 187: unknown type name 'mylib_type1_t'
E[13:12:40.820] [unknown_typename] Line 202: unknown type name 'mylib_type1_t'
E[13:12:40.820] [undeclared_var_use] Line 820: use of undeclared identifier 'mylib_type2_t'
...
<snip>

pp_file_not_found検索用語に追加すると、この非常に役立つ問題* にたどり着きました。この問題には、次のようなコメントがあります。

compile_flags.txt または compilation_database.json が設定されていないようです。そのファイルは、clangd にインクルード ファイルの場所を指示します。詳細については、プロジェクト セットアップ ガイドを確認してください。

  • 私はcoc-neovimを使用しているのではなく、Neovimの組み込みlspサーバーを使用しているため、この質問は直接関係ありませんが、たまたま私の解決策があることに注意してください。
于 2021-11-27T21:26:30.510 に答える