IAR工程如何搭建vscode+clangd编辑环境
最近在看一个前同事的单片机工程,因为我习惯使用vscode环境,vscode的环境比IAR自己的环境好多了,虽然IAR的环境比keil MDK好很多(这只是自己的观点,主要是从代码追踪,keil右击功能太少太弱了)。vscode自带的c/c++插件虽然能够提供LSP服务,也就是提供函数查找等功能,但是我感觉还是不够准确,有点老古董的感觉,能用但是不够完美。vscode使用clangd插件是一个不错的选择。
clangd插件需要有一个“compile_commands.json”的文件用于指导生成一个名为“.cache”的文件夹,那么现在的问题是IAR工程如何生成compile_commands.json文件呢?
这个问题困扰了我好久,也查了很多资料,自己也写了一个总结:
https://blog.csdn.net/duanjianbo3330/article/details/150997821?spm=1011.2124.3001.6209
但是使用这条shell脚本虽然能生成compile_commands.json文件,但是clangd无法识别,我也没找到原因,主要是因为我对compile_commands.json文件格式不了解。
后来我无意识查找的时候,发现使用vscode的插件EIDE,当导入并编译IAR工程后发现在build文件夹的一个子文件夹下有一个“compile_commands.json”的文件,这个文件是EIDE编译后生成的,只使用IAR软件编译是没有的。
到这里clangd已经安装了,compile_commands.json文件也有了。但是你会发现还是不会生成“.cache”文件,原因是clangd找不到“compile_commands.json”的路径,需要提供compile_commands.json所在路径。可以参考我的另外一篇文章。
https://blog.csdn.net/duanjianbo3330/article/details/150449011?spm=1001.2014.3001.5502
也就是需要配置clangd插件所在工作区的的一个Arguments参数。
注意一定是工作区clangd设置,另外注意使用“/”而不是windows下的“\”。
“-compile-commands-dir=${workspaceFolder}/build/SmartB_OS_Project”
其中“${workspaceFloder}”是EIDE导入后生成“xxx.code-workspace”所在目录。
最后关闭并重启一下vscode,或者右键---》命令面板---》clangd:Restart Language Server。
最后在compile_commands.json文件所在目录下生成了一个.cache的文件夹。并且头文件、函数、全局变量等等都可以找到了。
终于可以将微软的c/c++插件禁掉了,先让它躺一段时间吧(* ̄︶ ̄)。
EIDE导入keil MDK工程也是一样的操作,但是keil C51虽然能够生成compile_commands.json文件并且被clangd识别,但是好多头文件找不到,例如reg51.h,还是建议现用c/c++插件吧。