1、介绍
帮助开发者编写、理解和 通过提供以下条件来改进C/C++代码:
- 代码补全
- 编译错误与警告
- 首选定义与交叉引用
- 悬停信息与内嵌提示
- 包括管理层
- 代码格式化
- 简单重构
clangd详细的介绍和可参考:VS Code 插件 clangd的用法 - newtonltr - 博客园
注意:
你必须告诉clangd你的项目是如何构建的(编译标志)。你的构建系统通常可以生成一个compile_commands.json文件(例如,通过设置 ,使用 CMake)DCMAKE_EXPORT_COMPILE_COMMANDS=1
[
{ "directory": "/home/user/llvm/build",
"arguments": ["/usr/bin/clang++", "-Irelative", "-DSOMEDEF=With spaces, quotes and \\-es.", "-c", "-o", "file.o", "file.cc"],
"file": "file.cc" },
{ "directory": "/home/user/llvm/build",
"command": "/usr/bin/clang++ -Irelative -DSOMEDEF=\"With spaces, quotes and \\-es.\" -c -o file.o file.cc",
"file": "file2.cc" },
...
]
可参考官网:clangd - Visual Studio Marketplace
2、安装
(1)clangd插件安装

(2)clangd的服务器安装
linux下的安装命令sudo apt-get install clangd
其它平台安装可参考:VS Code 插件 clangd的用法 - newtonltr - 博客园
3、VSCode使用
demo的tree路径如下:
.
├── CMakeLists.txt
├── include
│ └── DataProcessor.h
├── main.cpp
└── src
└── DataProcessor.cpp
(1)CMakeLists.txt
cmake_minimum_required(VERSION 3.16.3)
project(test)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) #生成compile_commands.json
include_directories(include)
add_executable(${PROJECT_NAME} main.cpp ./src/DataProcessor.cpp)
(2)code
#include <iostream>
#include <assert.h>
#include <thread>
#include "DataProcessor.h"
int cnt = 0;
void func(){
if(cnt < 3){
printf("func i =%d\n",cnt);
cnt++;
func();
}
}
int main(){
DataProcessor p;
p.process("hello");
p.process("world");
std::cout << "Result = " << p.result() << std::endl;
#if 0
printf("hello world\n");
func();
while(cnt < 30*10000){
cnt++;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
#endif
return 0;
}
DataProcessor.cpp
#include "DataProcessor.h"
#include <iostream>
// Impl 的完整定义只在 cpp 中
class DataProcessor::Impl {
public:
void process(const std::string& data) {
std::cout << "Processing data: " << data << std::endl;
result_ += static_cast<int>(data.size());
}
int result() const {
return result_;
}
private:
int result_ = 0;
};
DataProcessor::DataProcessor()
: impl_(std::make_unique<Impl>()) {}
DataProcessor::~DataProcessor() = default;
void DataProcessor::process(const std::string& data) {
impl_->process(data);
}
int DataProcessor::result() const {
return impl_->result();
}
DataProcessor.h
#pragma once
#include <memory>
#include <string>
class DataProcessor {
public:
DataProcessor();
~DataProcessor(); // 必须在 cpp 中定义
void process(const std::string& data);
int result() const;
private:
// Impl 是一个"只为 DataProcessor 服务"的实现类
class Impl;
std::unique_ptr<Impl> impl_;
};
(3) build
使用CMake生成可执行的工程文件
(4)手段指定compile_commands.json目录


打开settings.json文件,添加下面的字段clangd配置

然后依次执行下面的2个操作:

从下面可以看出clangd已经生效:

