VSCode的clangd插件简单介绍和使用

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已经生效:

相关推荐
Hello World . .3 天前
Linux:线程间通信
linux·开发语言·vscode
被制作时长两年半的个人练习生3 天前
claude code for vscode 配置 qwen3.5
ide·vscode·claude code·qwen3.5
圣心3 天前
Visual Studio Code 中的 AI 智能操作
ide·人工智能·vscode
吹牛不交税3 天前
关于vscode左侧资源管理器目录层级疑似异常的问题
ide·vscode·编辑器
嵌入小生0073 天前
线程间通信---嵌入式(Linux)
linux·c语言·vscode·嵌入式·互斥锁·线程间通信·信号量
琛説3 天前
彻底解决 Codex / Copilot 修改中文乱码【含自动化解决方案】
vscode·copilot·codex
学嵌入式的小杨同学3 天前
嵌入式硬件开发入门:PCB 设计核心流程 + 基础元器件实战指南
vscode·后端·嵌入式硬件·架构·vim·智能硬件·pcb工艺
刘恒1234567894 天前
VSCODE
vscode
你怎么知道我是队长4 天前
VsCode插件推荐---Todo Tree
ide·vscode·编辑器
becatjd4 天前
VScode的claude code插件报错command ‘claude-vscode.editor.openLast‘ not found
ide·vscode·编辑器·claude·anthropic·claude code