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

相关推荐
2501_9159090621 小时前
Windows 上用 VS Code 调试 iPhone 真机 App,KXBuild 断点、崩溃定位实操
ide·windows·vscode·ios·iphone·个人开发·敏捷流程
小卡拉米本米1 天前
解决Vscode使用GitHub账号登录慢的问题
ide·vscode·编辑器
小菜要扣篮1 天前
Ubuntu 下使用 vscode 打开 C++ 项目后,无法通过 F12 定位到定义问题解决
c++·vscode·ubuntu
迪菲赫尔曼2 天前
【基础篇 08】让VS Code连接服务器:界面在本地,文件保存到远端
运维·服务器·vscode·yolo·论文·教程·ultralyt
2501_915106322 天前
Windows 上开发 Unity iOS,使用 KXBuild 进行真机调试、性能采样与打包 ipa
windows·vscode·unity·ios·个人开发·swift·敏捷流程
MicrosoftReactor3 天前
技术速递|超越一刀切:为 GitHub Copilot CLI 和 VS Code 实现决策路由
vscode·ai·github·copilot·决策路由
2501_915918413 天前
Windows 上开发 React Native iOS,真机调试、Fast Refresh 与打包 ipa
windows·vscode·react native·ios·个人开发·swift·敏捷流程
golang学习记4 天前
Zed Git重大更新:目录级对比支持分栏Diff
git·vscode·zed
2501_915106324 天前
iOS 单元测试怎么跑?用 KXApp 在 VS Code 里跑 XCTest 和 Swift Testing
ide·vscode·ios·单元测试·个人开发·swift·敏捷流程
golang学习记5 天前
VS Code Agents新特性:标签页式工作区选择器
vscode