clang(clangd)与arm-linux-gcc、ARMGCC、ICCARM(IAR)、C51编译器的兼容性
环境:vscode+clangd+EIDE开发开发单片机(C51 keilMDK IAR)。
vscode+远程+clangd+arm-linux-gcc(交叉编译工具链)。
(1)首先clang(clangd)是兼容gcc的,也就是兼容arm-linux-gcc(交叉编译工具链),所以使用第三方软件bear追踪make编译uboot或者内核源码生成的compile_commands.json文件是完全可以被clangd识别的。
(2)clangd与kei C51的兼容性。经过我的测试使用vscode+EIDE+clangd导入C51工程后,生成的compile_commands.json文件虽然也能够被clangd识别,但是存在好多错误例如找不到str、sbit这些关键字的定义,无法找到某些函数。我咨询过EIDE论坛。他们的说法是clang并不兼容C51、ARMGCC(keil MDK的编译器)、IAR编译器(iccarm.exe),但是clang是兼容gcc的,因此建议我还是使用vscode的c/c++插件来追踪keil c51的相关全局变量或者函数等。
我发现使用clangd插件追踪vscode+keil C51工程在涉及到reg51.h头文件中定义的内容或者keil C51软件再带的配置例如“code”关键字,clangd无法追踪,另外需要自己在.clangd文件中添加头文件路径。其他的情况还好。
vscode的使用EIDE+c/c++插件对keil c51的函数追踪效果也不好,有时候也找不到对应头文件中函数声明对应的函数定义。(可能是c/c++插件的一个bug,我发现只要打开函数定义所在的源文件,c/c++插件会形成一个缓存文件在“C:\Users\Administrator\AppData\Local\Microsoft\vscode-cpptools”中,这样右键定义的时候就可以找到函数定义了,而不是跳转到函数声明。我找了好久也没有好的办法,不过可以通过安装c/c++ GNU global或者c++ intellisense插件,环境变量PATH添加GNU Global的路径就可以了。详情请参考:https://zhuanlan.zhihu.com/p/680392005)。不过也需要使用c/c++插件。
vscode使用EIDE+Clangd插件导入keil C51工程无法找到<REG51.H>头文件的问题 - Embedded IDE Forum
(3)vscode+EIDE+IAR+clangd。这个环境我最近也在测试,发现虽然clang不兼容IAR的编译器,但是使用clangd追踪过程中未发现明显错误。因此我现在暂时还未使用c/c++插件。
(4)vscode+EIDE+Keil MDK+clangd。这个环境我最近也在测试,也是暂时未发现严重与clang的兼容型问题。因此我现在暂时还未使用c/c++插件。