有些时候由于收到工作环境制约,不方便生成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 个赞