现代 C++ 开发工作流(VSCode / Cursor)

✅ 推荐的现代 C++ 开发工作流(含 VSCode / Cursor 插件配置)


🧰 一、环境要求

  • C++ 编译器(如 g++clang++
  • CMake(建议 ≥ 3.16)
  • clangd(建议 ≥ 14,最好用系统包管理器安装)
  • VSCode 或 Cursor 编辑器

🪛 二、VSCode 插件安装(适用于 VSCode 和 Cursor)

打开 VSCode 插件市场,安装以下插件:

插件名称说明
clangd由 LLVM 官方维护的语言服务器,提供智能跳转、补全等
CMake Tools用于管理构建配置、运行 cmake 构建
CMake提供 CMakeLists.txt 的语法高亮和智能感知
CodeLLDB(可选)高级调试功能(用于断点、变量查看)
Better C++ Syntax(可选)颜色高亮更强

📝 Cursor 编辑器内置了对 clangd 的支持,只要项目中有 compile_commands.json,通常无需额外配置插件,但可通过设置检查是否启用 clangd


⚙️ 三、clangd 安装与配置

1. 安装 clangd(按平台)

  • macOS(推荐用 Homebrew):
brew install llvm
  • Ubuntu:
sudo apt install clangd-14
  • Windows:

使用 LLVM 官方安装包 安装 clangd,并加入 PATH。

2. VSCode 设置 clangd 路径(可选)

打开 VSCode 设置(Ctrl+Shift+P → Preferences: Open Settings (JSON)),添加:

"clangd.path": "/usr/bin/clangd"  // 或 /opt/homebrew/opt/llvm/bin/clangd

🧱 四、CMake 项目初始化与构建

项目结构建议:

my_project/
├── CMakeLists.txt
├── src/
│   └── main.cpp
├── include/
│   └── mylib.hpp
├── build/                  # 构建输出目录
└── .clangd                # clangd 配置(可选)

执行构建流程:

mkdir -p build
cd build
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
make -j
ln -s build/compile_commands.json .  # 可选,VSCode 更好识别

📦 五、.clangd 示例配置(可选)

放在项目根目录的 .clangd 文件中:

CompileFlags:Add: [-Wall, -std=c++17]
Diagnostics:UnusedIncludes: StrictClangTidy:Add: [-checks=modernize-*]

🧭 六、VSCode 项目配置推荐(可选)

.vscode/settings.json 示例:

{"C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools","C_Cpp.default.compileCommands": "${workspaceFolder}/build/compile_commands.json","clangd.arguments": ["--background-index","--clang-tidy"],"cmake.sourceDirectory": "${workspaceFolder}","cmake.buildDirectory": "${workspaceFolder}/build"
}

✅ 七、日常工作流简版回顾

步骤命令 / 操作
初始化构建cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
编译项目make -j 或用 CMake Tools 插件点击构建
清理构建make cleanrm -rf build/
打开项目VSCode / Cursor 自动识别并启用 clangd
写代码 / 跳转 / 补全 / 调试全流程无阻碍
新增源文件写完保存,clangd 会自动索引,无需额外操作

🧠 提示

  • 第一次打开项目:clangd 会慢慢建立 .cache/clangd/index,稍等几秒即可

  • 如果 Cursor 识别不到类型,优先检查:

    • compile_commands.json 是否存在?
    • clangd 是否正确读取?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916333.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[SAP ABAP] ALV报表练习4

SO销售订单明细报表业务目的:根据选择屏幕的筛选条件,使用ALV报表显示销售订单详情(Sales Order、Material、现有Qty、已开立数量以及剩余数量等)信息效果展示我们在销售订单栏位输入需要查询的SO单号,这里我们以SO单号0000000221为例&#x…

《设计模式之禅》笔记摘录 - 10.装饰模式

装饰模式的定义装饰模式(Decorator Pattern)是一种比较常见的模式,其定义如下:Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending fu…

[AI8051U入门第十步]W5500-客户端

学习目标: 1、认识W5500模块 2、驱动W5500静态获取ip 3、获取全球唯一码作为mac地址 4、拔出网线重插网线自动获取IP 5、编写W5500作为客户端进行TCP/IP代码一、W5500介绍 W5500 是一款由韩国 WIZnet 公司推出的高性能 硬件 TCP/IP 嵌入式以太网控制器,专为嵌入式系统设计,…

UNETR++: Delving Into Efficient and Accurate 3D Medical Image Segmentation

摘要得益于Transformer模型的成功,近期研究开始探索其在3D医学分割任务中的适用性。在Transformer模型中,自注意力机制是核心构建模块之一,与基于局部卷积的设计相比,它致力于捕捉长距离依赖关系。然而,自注意力操作存…

Kotlin Flow 在 Jetpack Compose 中的正确打开方式:SharedFlow vs StateFlow 与 LaunchedEffect

在 Jetpack Compose 中,Kotlin Flow 是处理异步数据流的核心工具,而 SharedFlow 和 StateFlow 是最常用的两种 Flow 类型。但很多开发者对它们的适用场景、如何与 LaunchedEffect 配合使用存在困惑。本文将深入探讨它们的区别,并给出最佳实践…

嵌入式——C语言:指针①

一、指针特点1.让代码更加简洁高效2.提供直接访问内存的操作3.利用指针可以直接操作硬件二、指针概念(一)地址:为了区分内存中不同字节的编号(0到2^16-1)(二)指针:指针就是地址&…

RabbitMQ—HAProxy负载均衡

上篇文章: RabbitMQ—仲裁队列https://blog.csdn.net/sniper_fandc/article/details/149312579?fromshareblogdetail&sharetypeblogdetail&sharerId149312579&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目录 1 HAProxy安装…

QT中启用VIM后粘贴复制快捷键失效

当在QT中启用FakeVim之后,Ctrl C 和 Ctrl V 快捷键就变成 Vim 的快捷键了,我希望它还是原来的复制粘贴功能,打开:编辑 > Preferences…,然后勾选 “Pass control keys”即可,如下:

TCP三次握手与四次挥手全解析

🌊 TCP三次握手与四次挥手全解析(含序列号动态追踪)🔑 TCP 协议核心机制 序列号 (seq):数据字节流的唯一标识(32位循环计数器)确认号 (ack):期望接收的下一个序列号(ack …

7月26号打卡

作业:题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一…

C++/CLI与标准C++的语法差异(一)

🌌 C/CLI与标准C的语法差异(一)🔬 第一章:类型系统革命 - 彻底解构三语言范式 🧪 1.1 类型声明语义差异矩阵 #mermaid-svg-L5kQ3iy05pKo4vIj {font-family:"trebuchet ms",verdana,arial,sans-se…

输电线路微气象在线监测装置:保障电网安全的科技屏障

在电力传输网络中,输电线路微气象在线监测装置通过集成专业传感器与智能分析技术,实现对线路周边环境参数的实时采集与动态分析,为电网运行安全提供数据支撑。该设备针对输电线路特殊工况设计,具备高适应性、高可靠性特点。工作原…

基于springboot的图书借阅系统

用户:借阅信息管理,续借信息管理,还书信息管理,图书信息,系统公告,留言板,我的中心管理员:图书信息管理,图书类型管理,借阅信息管理,续借信息管理…

Xinference vs SGLang:详细对比分析

概述对比特性XinferenceSGLang定位通用AI模型推理平台高性能LLM服务框架专注领域多模态模型统一接口LLM推理性能优化设计理念易用性和兼容性性能和效率核心架构对比 Xinference 架构特点 Xinference 架构: ├── API层(REST/CLI/Python) ├─…

双非上岸985!专业课140分经验!信号与系统考研专业课140+上岸中南大学,通信考研小马哥

一.经验分享个人情况:初试总分377,政治59,英语二75、数学二103、专业课140。本科为湖南一所双非一本,专业是电子信息工程,本科成绩一般,无奖学金无评优无科研竞赛,属于三无人员&…

配置DNS正反向解析

服务端master配置:yum install bind -y配置静态ip:修改配置文件:主:区域:正向解析:反向解析:开启服务:客户端node1配置:yum install nginx -y配置静态ip:使用xftp将文…

MyBatis-Plus 通用 Service

引言 在开发 Java Web 应用程序时,我们经常需要进行大量的数据库操作,如创建、读取、更新和删除(CRUD)。MyBatis-Plus 作为一个强大的 MyBatis 增强工具,为我们提供了通用 Service 接口,极大地简化了这些操…

聚类-一种无监督分类算法

目录 1、聚类任务 2、性能度量 (1)外部指标 (2)内部指标 3、具体聚类方法 (1)原型聚类 (2)密度聚类 (3)层次聚类 “无监督学习”(unsupervised learnin…

ES6 标签模板:前端框架的灵活利器

ES6(ECMAScript 2015)引入的模板字符串(Template Literals)为 JavaScript 开发者提供了更简洁的字符串处理方式,而模板字符串标签(Tagged Template Literals)则进一步扩展了其功能性。通过标签函…

解锁编程核心能力:深入浅出数据结构和算法

——为什么它们是你代码效率的终极武器? 🌟 引言:程序世界的基石 想象你正在建造摩天大楼:数据结构是钢筋骨架,决定建筑的结构与承重能力;算法则是施工蓝图,指导如何高效完成建造。两者结合&am…