clangd能否不依赖compile_commands.json?

有些时候由于收到工作环境制约,不方便生成compile_commands.json,比如windows下的单片机编程。这时候像ccls的.ccls文件就能适应这种情况,不知道clangd是否也有类似的机制?

可以用 compile_flags.txt

感谢。。。我光纠结这个.clangd的yaml怎么不生效,没注意还有这个选择,自己把自己限制住了。。。

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1

就可以生成 json 文件了。

也可以使用 .clangd 文件来做这件事情,下面是官方文档: https://clangd.llvm.org/config.html

下面是一个示例:

CompileFlags:
  Add:
    - -I/opt/xx/inc
    - -Ixxx

.clangd 也能用来移除CMake为非 clang++/g++ 而生成的参数,这些 clang++/g++ 不认识的编译器参数将导致 clangd 无法工作。

比如我的这个 repo 里面的用法:

还有个工具叫bear,能生成json文件

我按照这个方法试验没有成功,配置了路径clangd没能正常解析出来

好吧,如果你现在上面的解决方案能工作了的话算了。如果不能工作,能看看你的clangd的记录吗?

是需要看clangd的log吗?–log=verbose这样吗?

比如 eglot 就是一个 *EGLOT xxx* 而 clangd 则是一个 *clangd xxx* 的 Buffer,里面内容大概长这样:

[client-request] (id:1050) Tue May  9 21:42:06 2023:
(:jsonrpc "2.0" :id 1050 :method "textDocument/documentHighlight" :params
          (:textDocument
           (:uri "file:///home/colawithsauce/Projects/ECE408_Exercises/src/mat_transpose.cu")
           :position
           (:line 21 :character 0)))
[client-request] (id:1051) Tue May  9 21:42:06 2023:
(:jsonrpc "2.0" :id 1051 :method "textDocument/signatureHelp" :params
          (:textDocument
           (:uri "file:///home/colawithsauce/Projects/ECE408_Exercises/src/mat_transpose.cu")
           :position
           (:line 21 :character 0)))
[server-reply] (id:1049) Tue May  9 21:42:06 2023:
(:id 1049 :jsonrpc "2.0" :result nil)
[server-reply] (id:1050) Tue May  9 21:42:06 2023:
(:id 1050 :jsonrpc "2.0" :result
     [])
[server-reply] (id:1051) Tue May  9 21:42:06 2023:
(:id 1051 :jsonrpc "2.0" :result
     (:activeParameter 0 :activeSignature 0 :signatures
                       []))
[stderr] I[21:42:06.931] <-- textDocument/hover(1049)
[stderr] I[21:42:06.932] --> reply:textDocument/hover(1049) 0 ms
[stderr] I[21:42:06.932] <-- textDocument/documentHighlight(1050)
[stderr] I[21:42:06.933] --> reply:textDocument/documentHighlight(1050) 0 ms
[stderr] I[21:42:06.933] <-- textDocument/signatureHelp(1051)
[stderr] I[21:42:06.937] --> reply:textDocument/signatureHelp(1051) 3 ms

单片机编程不是有Keil吗

我似乎知道问题了,我的clangd是这样写的

---
CompileFlags:
  Add:
    [
      -include-dir=/D/path
    ]

工作环境在windows上,似乎不能被正确识别出来路径。而:是yaml的通配符,如果写成·D:\path·会报错。。 我用vscode跑的环境,clangd的输出在另外一台不联网的电脑上,我导不出来,个人观察没什么其他明显的问题

这款单片机用IAR的,不过不论是keil还是IAR写代码都挺难用的。。。

1 个赞