Vscode + Clangd 配置嵌入式 Linux 开辟环境
之前我一直使用VSCode + C/C++ + Remote - SSH
举行嵌入式 Linux 驱动开辟学习
但经常找不到头文件,主动补全也几乎不可用
https://i-blog.csdnimg.cn/blog_migrate/d12f5e39440c7fe9abe4ac194945565f.png
在网上查找许多帖子后,学习使用了
VSCode + C/C++ + clangd + Remote - SSH
举行开辟
Bear
clangd 须要一个 compile_commands.json 文件才气精确剖析项目标编译选项和文件依赖
可以使用 Cmake 或 Bear 生成 compile_commands.json 文件
由于之前没有使用过 CMake,再加上学习 CMake 有肯定的本钱,所以我选择使用 Bear 工具来生成 compile_commands.json 文件
安装 Bear
sudo apt-get install bear
查看 Bear 是否安装成功
https://i-blog.csdnimg.cn/blog_migrate/c0cb179f373e5126c57d663f927a810e.png
Bear 的使用
https://i-blog.csdnimg.cn/blog_migrate/da2a965b2a1bf830fc2efbad0bcda463.png
2.4.x 版本之前是在 build 命令前加上 bear 命令
bear <your-build-command>
2.4.x 版本之后是
bear -- <your-build-command>
使用 Bear 生成compile_commands.json
在 Linux 源码文件中使用 bear 命令生成compile_commands.json
ERROR: ld.so: object ‘/usr/${LIB}/bear/libear.so‘ from LD_PRELOAD
我的 Bear 版本是 2.3.11,没有主动设置 LD_PRELOAD 环境变量
编译时会产生 ld.so: object ‘/usr/${LIB}/bear/libear.so‘ from LD_PRELOAD 错误
https://i-blog.csdnimg.cn/blog_migrate/09fd834cc6706184ed628c7697f1d10e.png
办理方案
检查 libear.so 路径:
使用以下命令检查 libear.so 的实际路径
find /usr -name libear.so
然后使用 bear -l 指定路径
bear -l /实际路径/libear.so make
或者手动设置 LD_PRELOAD 再使用 bear 命令
export LD_PRELOAD=/实际路径/libear.so
设置交叉编译环境
然后执行命令 bear -l /usr/lib/x86_64-linux-gnu/bear/libear.so make -j4
命令执行结束后会在项目文件夹下生成 compile_commands.json 文件
https://i-blog.csdnimg.cn/blog_migrate/6da138ab414a7a41997c3e9a4b295290.png
须要将 “cc” 全局更换为 “arm-buildroot-linux-gnueabihf-gcc”
在 vim 中输入如下命令
:%s/"cc"/"arm-buildroot-linux-gnueabihf-gcc"/g
https://i-blog.csdnimg.cn/blog_migrate/3250ef59128d609f52f8beb95370ed1a.png
不更换的话会报这个错
https://i-blog.csdnimg.cn/blog_migrate/fea5aae8bfb03d1c31f2269f2ddc61e2.png
Unsupported option ‘-mabi=’ for target ‘x86_64-unknown-linux-gnu’
clangd
在 Linux 上安装 clangd
执行命令 sudo apt-get install clangd 后显示无法定位软件包
https://i-blog.csdnimg.cn/blog_migrate/e5dd84fe209636b0ba0ae2cd4d5bd640.png
查看资料发现
我的 Ubuntu 版本是 18.04.6
默认的 clangd 版本非常老 (安装命令都不一样)
https://i-blog.csdnimg.cn/blog_migrate/6f053860374a5cb699cfaf125bb75b90.png
https://i-blog.csdnimg.cn/blog_migrate/52794c3ef7e5b6cd7725744566598feb.png
手工安装 clangd
从官网 https://github.com/clangd/clangd/releases 下载安装包
https://i-blog.csdnimg.cn/blog_migrate/96cad8d78bf2e1fa96563701fb5752fa.png
将安装包中的 bin 和 lib 拷贝至 /usr 目录下
安装后查看 clangd 版本
https://i-blog.csdnimg.cn/blog_migrate/e473b99db2e7989e7c39e527a7036f6b.png
在 VSCode 上配置 clangd
settings.json
在 VSCode 的配置文件中增加如下配置
"clangd.arguments": [
"--background-index", // 在后台自动分析文件(基于complie_commands)
"--compile-commands-dir=/home/yz/workspace/kernel-driver/linux-xlnx-xlnx_rebase_v5.4_2020.2",
// compelie_commands.json文件的目录位置
"-j=4", // 同时开启的任务数量
"--query-driver=/usr/bin/gcc", // 编译器的路径
"--clang-tidy", // clang-tidy 功能
"--clang-tidy-checks=performance-*,bugprone-*",
"--all-scopes-completion", // 全局补全(会自动补充头文件)
"--completion-style=detailed", // 更详细的补全内容
"--header-insertion=iwyu", // 补充头文件的形式
"--pch-storage=disk", // pch 优化的位置
],
"clangd.path": "/usr/bin/clangd",
"clangd.fallbackFlags": [
"-I/home/yz/workspace/kernel-driver/linux-xlnx-xlnx_rebase_v5.4_2020.2/include",
"-I/home/yz/workspace/kernel-driver/linux-xlnx-xlnx_rebase_v5.4_2020.2/arch/arm/include",
"-I/home/yz/workspace/kernel-driver/linux-xlnx-xlnx_rebase_v5.4_2020.2/arch/arm/include/generated/"
]
clangd.fallbackFlags 是 clangd 的配置选项之一,用于指定当无法从 compile_commands.json 文件中获取编译选项时要使用的备用编译选项
这里我配置的是 Linux 源码的函数头文件路径
.clangd
创建 .clangd 文件,把它放在工程目录下
我的 .clangd 文件内容如下
CompileFlags:
Add:
[-I, "/usr/include"]
Remove:
[
-fconserve-stack,
-fno-ipa-sra,
-fno-var-tracking-assignments
]
关于 CompileFlags,官方资料如下
https://i-blog.csdnimg.cn/blog_migrate/6d6b49dd84c9afd7a23743e09f424a20.png
Add: [-I, "/usr/include"]
是为了办理找不到尺度库头文件的问题
https://img-blog.csdnimg.cn/direct/93ba1d77c12f42f986b24c269cb5ef31.png
Remove 是为了办理如下错误
https://i-blog.csdnimg.cn/blog_migrate/56f49a983a6485c40ce5999f447dcd70.png
至此,使用 clangd 的嵌入式 Linux 开辟环境配置完成
参考
C++开辟环境最佳实践
bear工具使用:ERROR: ld.so: object ‘/usr/${LIB}/bear/libear.so‘ from LD_PRELOAD
在Ubuntu中搭建嵌入式Linux开辟环境
最终,我看向了clangd
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]