赞
踩
系列文章
苦于微软出品的 C/C++ 插件久矣,时不时就会出现代码提示失效,跳转失败的问题。现在火热的Jetbrains公司的Clion以及Vim上的Youcompleteme插件现在都在用clangd,相比于 C/C++扩展,clangd具有全项目索引、代码跳转、变量重命名、更快的代码补全、提示信息、格式化代码等功能,内存占用和资源占用上也更具优势。
好的工具安装也不是一蹴而就的,下面记录一下安装使用vscode-clangd的艰辛历程
本人系统环境 CentOS Linux release 7.9.2009 (Core)
Ctrl + Shift + X
在扩展商店中搜C/C++
禁用已安装的C/C++插件,如C/C++
、C/C++ Themes
等Ctrl + Shift + X
在扩展商店中搜clangd
安装即可clangd
插件是基于clangd
命令实现的Ctrl + Shift +P
在命令窗口中搜clangd: Download language server
,vscode自动从https://github.com/clangd/clangd/releases下载最新的clangd包,剩下就是焦灼的等待。第三步也可以手动下载对应的离线包,如clangd-linux-16.0.2.zip,然后解压后将其bin路径配置到PATH
环境变量中,重启vscode即可。
不幸的是一遍遍的安装一遍遍的提示找不到不clangd
需要下载安装,手动执行clangd --version
出现bin/clangd: /lib64/libc.so.6: version
GLIBC_2.18’ not found (required by bin/clangd)`错误提示。
rpm -qf /lib64/libc.so.6
查看这个动态库属于glibc-2.17-325.el7_9.x86_64
,通过命令strings /lib64/libc.so.6 | egrep ^GLIBC_2
查看其兼容的版本号。
CentOS上各种库与工具相对来说版本都很低。那么接下来更新一些工具库来源码编译clangd
clangd
clangd understands your C++ code and adds smart features to your editor: code completion, compile errors, go-to-definition and more.
clangd is a language server that can work with many editors via a plugin. Here’s Visual Studio Code with the clangd plugin, demonstrating code completion:
clangd is based on the Clang C++ compiler, and is part of the LLVM project.
根据llvm源码告警,cmake版本不低于3.20.0
wget https://github.com/Kitware/CMake/releases/download/v3.27.4/cmake-3.27.4-linux-x86_64.tar.gz
tar -xvf cmake-3.27.4-linux-x86_64.tar.gz
export PATH=/usr/local/cmake-3.27.4-linux-x86_64/bin:$PATH
根据cmake告警提示Host GCC version must be at least 7.1, your version is 4.8.5.
,gcc版本不低于7.1,这里直接安装使用scl的devtoolset-8工具链
yum install -y centos-release-scl
yum install -y scl-utils-build
yum install -y devtoolset-8-toolchain
scl -l
scl enable devtoolset-8 bash
clangd
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-16.0.6/llvm-project-16.0.6.src.tar.xz
tar -xvf llvm-project-16.0.6.src.tar.xz
mkdir llvm-project-16.0.6.src/build
cd llvm-project-16.0.6.src/build
cmake3 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/llvm-16.0.6 -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" ../llvm
make install -j $(nproc)
/usr/local/llvm-16.0.6/bin
添加到PATH
环境变量中配置相对来说比较复杂,包括插件配置,工程配置,格式化风格配置等
Ctrl + ,
切换出配置页面,【工作区】【扩展】【clangd】,也可以在settings.json直接配置,其中clangd.arguments
的配置clangd --help
即可
// 是否检查插件冲突 "clangd.detectExtensionConflicts": true, "clangd.path": "clangd", // 查找的头文件路径,每一项前缀 -I "clangd.fallbackFlags": [], "clangd.arguments": [ // 在后台自动分析文件(基于complie_commands) "--background-index", // 标记compelie_commands.json文件的目录位置 // "--compile-commands-dir=build", // 同时开启的任务数量 "-j=12", // 全局补全(会自动补充头文件) "--all-scopes-completion", // 更详细的补全内容 "--completion-style=detailed", // Include what you use "--header-insertion=iwyu", // pch优化的位置 disk memory "--pch-storage=memory", "--cross-file-rename", "--enable-config", // clang-format style to apply by default when no .clang-format file is found "--fallback-style=WebKit", "--pretty", "--clang-tidy", "--query-driver=clang++", ]
clangd is based on the clang C++ compiler, and understands even complex C++ code. However, you must tell clangd how your project is built (compile flags). A compile_commands.json file can usually be generated by your build system
参考 Project setup官方文档,总结三种生成 compile_commands.json
文件的方法
如果通过cmake 方式编译项目,3.5+版本中,在CMakeLists.txt
工程文件中添加 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
,或者cmake
添加 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
参数,make
后可以在 build 目录下生成compile_commands.json
文件
如果是基于make
方式来编译,那么可以先安装pip install compiledb
,之后在当前目录下运行
compiledb -n make -C build
compiledb make -C build
这两个命令中的其中一个来生成 compile_commands.json 文件,其中前者不会执行真正的 make 编译命令。
如果是基于其他方式,可以使用 https://github.com/rizsotto/Bear 项目中的方式来生成对应的 compile_commands.json 文件
配置默认的格式插件
clangd
也可以参考下列配置
"[cpp]": {
// 在cpp文件中,编辑器在保存的时候进行格式化
"editor.formatOnSave": true,
"editor.formatOnSaveMode": "file"
// 在cpp文件中,编辑器在打字的时候进行格式化
"editor.formatOnType": true,
// 在cpp文件中,编辑器在粘贴的时候进行格式化
"editor.formatOnPaste": true,
"editor.defaultFormatter": "llvm-vs-code-extensions.vscode-clangd"
}
clangd
根据.clang-format
配置文件进行格式化代码,若改配置文件未找到,则使用fallback-style
参数指定的风格进行格式化代码。
clang-format工具提供格式化功能,默认提供几个比较流行的代码风格。可以根据官方文档给出主流的代码风格连接进行查看,也可以使用工具进行格式处理查看效果
clang-format --style=LLVM -i main.cpp
对main.cpp源文件进行格式化处理,并改写原文件。clang-format --style=LLVM --dump-config > .clang-format
dump LLVM代码风格的配置文件,可以在此基础上根据需要进行调整,具体各配置项的代表意义可根据官方文档说明来理解。将配置好的.clang-format
文件放在工程目录下即可,不要过多的纠结细节
至此,上乘的C/C++的VSCode开发环境需要的主要依赖的插件
技巧
Ctrl + Shift + P
显示所有命令,查找Preferences: OPen Default Settings (JSON)
,可以查看默认的配置文件,可以根据需要来定制进行环境的迁移Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。