Vscode配置已有工程及自动格式化

news2024/10/6 14:30:24

这里写目录标题

    • 前言
    • 配置CMake
    • 配置clang&clang-tidy&clang-format
      • .clangd
      • .clang-tidy
      • .clang-format

前言

最近一直在用vscode写代码,发现vscode一旦配置好了真的好用,不论是语法提示,还是跳转,或者是format,都挺好用,当前,这一切的前提是已经配置好了,之前的文章《无痛VSCode+clangd+lldb+cmake配置C/C++开发环境》已经给大家介绍了如何去使用clangd+lldb+cmake去创建并配置一个工程。

今天再给大家介绍下,如何对已有的工程进行配置,配置cmake以及代码检查,自动进行format

在进行本文的操作时,要先确保已经根据文章《无痛VSCode+clangd+lldb+cmake配置C/C++开发环境》将clangd+lldb+Cmake在vscode中配置好了哦。

配置CMake

  1. CMake: Configure

使用vscode打开我们的工程目录,快捷键ctrl+shift+p,按下回车后,工程目录下就会出现一个CMakeLists.txt

如果项目比较复杂的话,可能需要手动调整一下CMakeLists来适配你的项目,对于比较简单的项目,基本上配置完就可以用。


2. build

接下来,不要直接在工程源目录下执行cmake,直接cmake的话会将cmake产生的文件都放在了源目录下,看起来非常乱,影响美观。先在源目录创建一个build文件夹,然后在build文件夹进行cmake

mkdir build
cd build
cmake ..

这样,cmake产生的文件都会存放在build目录中,其中我们编译使用的makefile



在build文件夹直接执行make,编译出来的可执行程序就会直接出现在build文件夹中,

cd build
make

这时候,vscode下方也会出现一个build按钮,直接点击这个按钮,也可以进行编译。

配置clang&clang-tidy&clang-format

.clangd

.clangd是一份存储clangd 配置的yaml文件,提供内联提示、语法高亮等辅助功能,同时内置了 clang-tidy 的功能。clangd会自动在当前目录及其父目录中寻找该配置文件。

关于.clang的更多细节,可以在clang官网了解,地址: https://clangd.llvm.org/config

如果想直接用的话,可以拷贝下面这份简单配置

Diagnostics:
  UnusedIncludes: Strict
Completion:
  AllScopes: true
CompileFlags:
  CompilationDatabase: build
Index:
  Background: Build
Hover:
  ShowAKA: true

.clang-tidy

.clang-tidy 是一个基于 Clang 的 C++ “linter” 工具的配置文件。其主要目的是提供一个可扩展的框架,用于诊断修复典型的编程错误,如风格违规,接口误用,或者可以通过静态分析推导出的错误。

.clang-tidy 文件中可以配置 clang-tidy 的各种检查选项。每个检查都有一个名字,可以使用 -checks= 选项来选择要运行的检查,该选项指定了一个由正向和负向(前缀为 - )glob 组成的逗号分隔的列表。正向 glob 添加了检查的子集,负向 glob 则移除了它们。例如,$ clang-tidy test.cpp -checks=-*,clang-analyzer-*,-clang-analyzer-cplusplus* 将禁用所有默认检查 (-*) 并启用所有 clang-analyzer-* 检查,除了 clang-analyzer-cplusplus* 的检查

此外,.clang-tidy 文件中还可以配置各种检查的选项。例如,readability-identifier-naming 检查的选项可以配置变量的命名规则。这些选项可以帮助 clang-tidy 根据配置提供更准确的代码分析结果。

总的来说,.clang-tidy 文件的主要作用是配置 clang-tidy,让这个工具能够更好地理解和分析您的代码。通过正确地配置 .clang-tidy 文件,可以提高 clang-tidy 的分析精度,从而提高编程的效率。

关于更多clang-tidy的细节,大家可以参阅clang官网,地址:https://clang.llvm.org/extra/clang-tidy/




以下是一份简单的.clang-tidy配置,大家可以直接拷贝到自己的源目录下

Checks: '-*,
  bugprone-,
  clang-analyzer-*,
  concurrency-*,
  cppcoreguidelines-*,
  misc-*,
  modernize-*,
  objc-*,
  performance-*,
  portability-*,
  readability-*,
  -cppcoreguidelines-avoid-c-arrays,
  -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
  -cppcoreguidelines-pro-type-const-cast,
  -cppcoreguidelines-pro-type-reinterpret-cast,
  -cppcoreguidelines-pro-type-vararg,
  -readability-identifier-length,
  -misc-const-correctness,
  -modernize-avoid-c-arrays,
  -modernize-use-trailing-return-type,
  -modernize-use-using'
CheckOptions:
  - key: readability-function-cognitive-complexity.IgnoreMacros
    value: true

.clang-format

.clang-format 是一个用于配置 clang-format 工具的文件。clang-format 是一个代码格式化工具,用于自动调整代码格式以满足一定的编程风格。它可以处理诸如缩进、空格、括号位置等细节,以保证代码的整洁和一致性。

.clang-format 文件中包含一组键值对,用于定义代码的格式化规则。这些规则包括但不限于:缩进的宽度、是否在某些符号前后添加空格、大括号的位置等。

.clang-format 文件通常放置在项目的根目录下,clang-format 工具在格式化代码时会自动寻找并使用这个文件中的规则。如果在项目的某个子目录下也有 .clang-format 文件,那么该子目录及其下级目录的代码会使用该子目录下的 .clang-format 文件。

为了能够实现自动format,我们首先要在自己的电脑上安装clang-format工具。

  • windows在clang官网下载:https://llvm.org/builds/
  • linux使用命令行安装
sudo apt install clang-format
  • macos使用brew安装
brew install clang-format

以下是一个简单的clang-format配置文件,基于llvm风格并限制单行最大长度

BasedOnStyle: LLVM
ColumnLimit: 80

关于更多clang-format配置细节,可以访问clang[官网](https://clang.llvm.org/docs/ClangFormatStyleOptions.html),地址: https://clang.llvm.org/docs/ClangFormatStyleOptions.html

在工程源目录下创建.clang-format文件,将上述内容拷贝到文件中,命令行执行如下命令,clang就会对我们的代码进行format

clang-format


但是为了实现自动format,我们还需要在vscode中安装clang-format扩展

这时,我们就可以配置这个扩展,在保存代码时自动format,在settings.json中添加如下配:

{
    "editor.formatOnSave": true,
    "clang-format.executable": "/usr/bin/clang-format"
}

其中,clang-format.executable为你系统上clang-format的路径,具体可以通过下列命令来查询

which clang-format

"editor.formatOnSave": true,表示在代码保存时进行format,当我们使用快捷键ctrl+s保存我们的代码时,就会进行format。

进一步的,你也可以配置代码自动保存来自动触发format,这一步就看自己的喜好了


以下是一个简单的settings.json,需要的可以直接拷贝

{
    "telemetry.telemetryLevel": "off",
    "git.autofetch": true,
    "git.autofetchPeriod": 300,
    "editor.rulers": [
        80
    ],
    "editor.renderControlCharacters": true,
    //显示空格
    "editor.renderWhitespace": "boundary",
    "extensions.ignoreRecommendations": true,
    "diffEditor.ignoreTrimWhitespace": false,
    "gitlens.advanced.telemetry.enabled": false,
    "gitlens.blame.avatars": false,
    "gitlens.codeLens.enabled": false,
    "gitlens.statusBar.enabled": false,
    "clangd.path": "/usr/bin/clangd",
    "github-enterprise.uri": "https://github.com",
    "files.autoSave": "afterDelay",
    "editor.formatOnSave": true,
    "clang-format.executable": "/usr/bin/clang-format",
    "files.autoSaveDelay": 1000
}

当做完上述配置后,你的vscode就会变得非常强大,使用起来的体验一点不输其他编译器,并且还能更灵活的进行配置,相信你一定会更享受写代码的过程~

《C++ Primer》《Effective C++》是C++开发者必不可少的书籍,如果你想入门C++,以及想要精进C++开发技术,这两本书可以说必须要有。此外,《Linux高性能服务器编程》以及《Linux多线程服务端编程:使用muduo C++网络库》.(陈硕)》是快速提高你的linux开发能力的秘籍。《大话设计模式》可以增强我们的模型提取及设计能力,写出更优雅的代码。同时,《操作系统导论》更是开发必读书目,在网上搜索相关资源也要花费一些力气,需要的同学可以关注公众号【程序员DeRozan】,回复【1207】快速免费领取~

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

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

相关文章

回归与聚类算法系列⑤:逻辑回归

目录 1、介绍 2、原理 输入 激活函数 3、损失及其优化 损失函数 优化 4、API 5、案例:乳腺癌肿瘤预测 数据集 代码 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习&#xff0…

CUDA和cudnn详细安装过程【通用win】

1 软硬件资源 仅作参考,其他型号通用 win 11 32内存显卡 RTX 2080Ti ,驱动版本号:516.59python 3.8.10torch 1.8.0 框架cudatoolkit 11.1cudnn 8.0.4 2 查看适用cuda版本 2.1 查看本机的cuda算力 安装之前先进入官网查看自己的显卡能不能用…

关于OxyPlot.Wpf包没有Plot控件问题

一、OxyPlot.Wpf 控件信息 GitHub:https://github.com/oxyplot/oxyplot 官方文档地址:https://oxyplot.readthedocs.io/en/latest/index.html 在网上查了好久T^T 最后安装了2.0.0版本就出现了

Trinitycore学习之在Linux环境上搭建服务器并测试运行

1:准备环境,这里用ubuntu 22.04进行测试,安装环境后为了方便,换源。 注意:这里用的虚拟机,在虚拟机上生成地图信息,地图信息占用内存比较大,我暂时设置磁盘50G进行测试,…

Electron和vue3集成(推荐仅用于开发)

本篇我们仅实现Electron和vue3通过先运行起vue3项目,再将vue3的url地址交由Electron打开的方案,仅由Electron在vue3项目上套一层壳来达到脱离本机浏览器运行目的 1、参考快速上手 | Vue.js搭建起vue3初始项目 npm install -g vue npm install -g vue/c…

openpnp - 接入西门子二手飞达

文章目录 openpnp - 接入西门子二手飞达概述笔记编译生产用的飞达控制板工程建立飞达控制板GCode驱动create actuatorscreate actuators - GetIDcreate actuators - PrePickcreate actuators - PostPickcreate actuators - AdvIgnoreErrcreate actuators - GetCountcreate actu…

八股文学习二(spring boot + mybatis)

三. 架构 1. spring boot Spring Boot是一个依靠大量注解实现自动化配置的全新框架。约定优于配置;独立运行的 Spring 项目,内嵌servlet容器;Spring Boot 框架内部已经实现了与Spring以及其他常用第三方库的整合连接,并提供了默…

2011-2015年西双版纳热带季节雨林碳水通量观测数据集

摘要 中国“双碳”目标的提出立足于应对气候变化的科学基础之上,增加碳汇、减少碳源成为实施气候治理的必需。陆地生态系统是重要的大气碳汇,而热带季节雨林生态系统作为中国陆地生态系统的组成部分,具有生物量丰富、生产力旺盛等特征,发挥着不可或缺的固碳功能。自2002年建…

选择(使用)数据库

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: use 数据库名称;大家应该知道,在对数据库进行操作的时候,要制定数据库的操作对象,也就是说操作哪一个数据库 案列:选择testing数据库 …

Cesium 加载gltf

imageBasedLightingFactor:指定基于漫射和高光图像的照明因子参数 let position Cesium.Cartesian3.fromDegrees(104.17401, 30.65793, 10);const heading Cesium.Math.toRadians(135);const pitch 0;const roll 0;const hpr new Cesium.HeadingPitchRoll(head…

Java实现合并多个excel操作

涉及较多封装的工具类,所有依赖的工具类均提供代码,根据名称新建对应的类,在每个工具类中再引入相应的依赖即可 首先需要明确的是,需要合并的每个excel的表头名称必须是相同的, 针对表头,建立传输的dto&a…

数据结构:树的概念和结构

文章目录 1. 树的概念2. 树的结构3. 树的相关概念4. 树的表示孩子表示法双亲表示法孩子兄弟表示法 5. 树在实际中的应用5. 树在实际中的应用 1. 树的概念 树是一种非线性的数据结构,它是由 n (n > 0)个有限结点组成一个具有层次关系的. 把它叫做树是因为它看起来像一棵倒挂的…

vue基础知识八:为什么data属性是一个函数而不是一个对象?

一、实例和组件定义data的区别 vue实例的时候定义data属性既可以是一个对象,也可以是一个函数 const app new Vue({el:"#app",// 对象格式data:{foo:"foo"},// 函数格式data(){return {foo:"foo"}} })组件中定义data属性&#xff…

学习day59

昨天学了插槽,但是没有即笔记了 今天的是vuex 总体来说,vuex就是一个共享单车,每个人都可以使用他,也可也对他进行反馈。即把一个数据列为vuex,然后每个组件可以使用这个对象,也可也反过来反馈他 这一个设…

VScode在服务器上远程调试python代码的工作目录问题

背景: 当前很多写代码都习惯使用相对路径,即以当前的py文件为工作目录去寻找其他的py文件。所以如果工作目录不是以当前的py文件为起始的话,这将导致去跑一些开源代码的时候运行不起来。 现在我遇到的问题就是,在远程服务器上&…

【MFC】tab控件 仿任务管理器 枚举窗口和进程

界面和关联变量设置 创建一个基于对话框的MFC项目,给主对话框添加一个tab控件(设置关联变量 类型:CTabCtrl 名称:m_tab),添加两个子对话框(IDC_PAGE1和IDC_PAGE2),给子对…

对IMU的认识

参数标定: 良率检测 内参标定过程 1.线性误差模型 零偏:静止时的误差 尺度偏差:每个轴上电压到实际值之间的比例差值 1->1.5 或者 1->1.3(直线的斜率) 轴偏差: 如下图 2.标定过程: 2.1角加速度标定 重…

84 # koa 实现文件上传功能

下面使用实现文件上传功能&#xff0c;先新建文件夹&#xff0c;结构如下&#xff1a; index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-…

EtsyAI评论分析工具:让你的店铺运营更省心!

Etsy 是一个在线市场平台&#xff0c;成立于 2005 年&#xff0c;总部位于美国纽约。Etsy 的主要特点是它专注于手工艺品、独立设计、艺术品、古董物品和特色商品的销售。 Etsy是一个知名的电商平台&#xff0c;它专注于手工艺品、创意设计和独特商品的售卖&#xff0c;相信大家…

【自动化测试】如何提高自动化脚本的健壮性和稳定性?

自动化脚本可能出错的原因&#xff1f; 配置环境引起 自动化测试脚本的配置。对测试程序进行配置。如&#xff1a;是否还原初始设置、是否删除某些数据。对浏览器进行配置。对与测试程序有关的程序或影响脚本稳定性的程序进行配置。 非配置环境引起 网络延时&#xff0c;识…