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

相关推荐
GDAL7 小时前
vscode 使用正则查找替换
ide·vscode·正则表达式·编辑器
HERR_QQ8 小时前
【cpp tool】GDB coredump vscode GUI 和多线程常用笔记
ide·笔记·vscode
研來如此9 小时前
VSCode连接远程服务器
服务器·ide·vscode
GHL2842710909 小时前
VSCode无法连接虚拟机,报错“XHR failed“,手动部署VSCode Server
ide·vscode·编辑器
啃火龙果的兔子9 小时前
vscode中的git插件
git·vscode·elasticsearch
deng-c-f19 小时前
配置(11):vscode中使用bookmarks扩展
ide·vscode·编辑器
啃火龙果的兔子1 天前
目前免费的ai编辑器或者vscode适用的免费的ai插件有哪些
人工智能·vscode·编辑器
小桥流水人家丶1 天前
vscode 格式Prettier配置
ide·vscode·编辑器
番茄灭世神1 天前
使用VScode开发ARM核芯片通用配置
arm开发·vscode·mcu·cmake·clangd·llvm·ninja