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

2023-11-08

前言

最近一直在用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】快速免费领取~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vscode配置已有工程及自动格式化 的相关文章

  • Ropemacs 使用教程

    有很多网站都有相关说明安装Ropemacs 但到目前为止我找不到任何有关如何操作的说明use安装完成后即可 我已经安装了它 或者至少看起来是这样 Emacs 在其顶部菜单栏中有 Rope 菜单 怎么办 到目前为止 我只能使用 显示文档 默认
  • Linux 上 Objective-C 的 IDE [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在学习 Objective C 我想知道在哪里可以找到 Linux 上 Objective C 的
  • VS 2017 颜色主题编辑器 - 如何更改 Intellisense 自动完成背景颜色

    我已使用颜色主题编辑器导入了透明主题 并且正在尝试更改自动完成框的背景颜色 目前 如下所示 它是透明的 并且很难阅读下面几行的文本 我尝试了多种元素 但找不到合适的元素 谷歌一无所获 如何更改自动完成 智能感知自动完成框背景颜色 将树视图背
  • Linux 上的 C++ IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 IntelliJ 14 中从临时文件运行代码?

    我创建了一个简单的 Java 临时文件 其中包含一个名为 测试泛型 包含一些代码和main方法 代码似乎没问题 但是当我尝试运行它时 通过右键单击 gt 运行 TestGenerics main 我收到此错误 未指定模块 包含 Lua 代码
  • 如何设置新语言 IDE

    在工作中 我们使用专有语言 并使用带有简单代码突出显示的 Notepad 进行编程 这真的很烦人 所以我想做的是花一些时间来设置一个文本编辑器或现有的 IDE 来支持我的语言 我在谷歌上搜索了很多 有很多选择 在开始工作之前我想问你什么是最
  • 查看 Intellij 项目中的错误[重复]

    这个问题在这里已经有答案了 我使用的是 Intellij 版本 8 如何查看整个项目的警告或错误 UPDATE See 这个答案 https stackoverflow com a 19366569 104891这是最新的 这里最初的答案是
  • 包 android.support.v4.app 不存在;在Android Studio 0.8中

    我最近将 android studio IDE 更新至 0 8 以与新的 android L SDK 配合使用 首先 我导入了一个已完成的 android 项目 该项目在旧版本的 android studio 中没有收到任何错误 在版本 0
  • 如何调试肉桂小程序?

    我想写一个肉桂小程序 这些都是基于 JavaScript 的 我希望编写的代码更改服务 打开和关闭它们 类似于WebDeveloper菜单小程序 https bitbucket org infiniteshroom cinnamon web
  • 是否有一个项目可以使用 Eclipse 代码库为 Emacs、VIM 和其他编辑器提供高级语言支持?

    这里有很多关于 IDE 与编辑器以及哪个更适合现代软件开发的问题 在答案中 一个常见的观点是 Eclipse 有更好的语言支持 例如for Java http help eclipse org indigo index jsp topic
  • 如何清除“运行”->“参数”菜单中的“参数”字段?

    我正在使用 CodeGear RAD Studio IDE 为了使用命令行参数测试我的应用程序 我多次使用 运行 gt 参数 菜单中的 参数 字段 但每次我为它提供一个新值时 它都无法从 下拉框 中删除 我需要清理这个字段 删除所有值 因为
  • 自动同步 Visual Studio 的类视图

    是否可以让 Visual Studio 的 类视图 窗格 在 视图 gt 类视图 下可用 自动同步到当前符号 基本上只要当前符号发生变化就会执行 View SynchronizeClassView See here https stacko
  • 在 Ubuntu18 上打开 Spyder3 时缺少依赖项导致密钥环错误?

    我对编程之类的东西相当陌生 我正在尝试使用 Spyder3 但不断收到此错误 如下 我使用的是Geforce 1080ti Ubuntu 18 04 01 python3 3 6 python2没有安装 我尝试了 pip3 install
  • 汤博乐开发工具

    我想创建 Tumblr 主题 有趣的是有没有 IDE Netbeans Eclipse PHPStorm 插件或开发工具 理想的情况是在浏览器中预览我的主题 而不将其上传到 Tumblr 谢谢 我找到了自己的方法来使用 PhpStorm 或
  • 使用 PHPstorm 让 php 代码在浏览器中执行

    因此 当我单击 运行 时 PHPstorm 正在其控制台中正常运行 php 代码 这很好 但我想在浏览器中看到它 所以我在 PHPstorm 中创建了一个新的 PHP Web 应用程序 将服务器设置为 localhost 8000 现在 当
  • 用于 PHP 开发的 Eclipse PDT 与 NetBeans [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 对于 PHP 开发 Eclipse PDT 与 NetBeans 相比如何 我刚刚买了一台装有 Windows 7 的新电脑 我开始设置
  • 如何在 IDE 中使用 Grails 依赖项

    So I finally https stackoverflow com questions 1867064 grails and local maven dependencies让我的依赖项与 Grails 一起工作 现在 我的 IDE
  • Sublime Text 2 在 Java 开发方面是否胜过 Eclipse [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 android studio 中禁用 gradle '离线模式'? [复制]

    这个问题在这里已经有答案了 我是 android studio IDE 开发的新手 每次当我导入在 android studio 中开发的示例项目时 我都会收到此错误 没有缓存版本com android tools build gradle
  • Visual Studio Professional 2013 Update 5 中的“在线服务不可用”问题

    我一直在 vscode 2013 工作直到今天 但是 当我今天早上尝试打开 IDE 时 它收到 您的许可证已过时 必须更新 错误消息 如下所示 在我尝试更新许可证和登录操作之后 当我尝试这两个时 它得到 在线服务不可用 请稍后重试 错误消息

随机推荐

  • vue面试题+答案,2021前端面试

    vue面试题 答案 2022前端面试 前端进阶面试题详细解答 MVC 和 MVVM 区别 MVC MVC 全名是 Model View Controller 是模型 model 视图 view 控制器 controller 的缩写 一种软件
  • 深度学习课程设计——波士顿房价预测

    基于密集连接神经网络的波士顿房价预测 摘 要 神经网络是从信息处理角度对人脑神经元网络进行抽象 建立某种模型 按不同的连接方式组成不同的网络 本文以波士顿房价这一经典数据集为基础 该数据集包含了住宅用地所占比例等13个特征 由于keras
  • rabbitmq基础9——流控、镜像队列、网络分区

    文章目录 一 流控 1 1 流控机制 1 2 流控原理 1 3 流控状态显示 1 4 流控对象 1 5 性能提升 二 镜像队列 2 1 机制原理 2 1 1 集群结构 2 2 镜像结构 2 2 1 组播GM 2 2 1 1 实现原理 2 2
  • 1067 Sort with Swap(0, i) (25 分)

    题目 题目链接 题解 思维 DFS 比较难想的是问题转化的思路 规定a i 表示索引为i处的初始数为a i 我们引入边 由i指向a i 由a i 指向i也可以 将所有n个边都连上后 可能存在若干个环 也可能自己指向了自己 自环 我们思考几种
  • 基于规则的错别字改错

    利用ahocorasick库调用AC自动机寻找已经定义的错别字 不进行分词 并输出错别字开始位置和结束位置 并且在原文中进行改正 import ahocorasick def correct typos text typos 构建 AC 自
  • 字符串排序(函数,指针)(C语言实现)

    编写程序 用户输入n个 n lt 100 字符串 每个字符串长度小于100 按照字典顺序将字符串进行排序 并输出 要求在排序中使用指针数组完成 输入说明 输入第一行是一个整数数字 表示n 接下来有n行字符串 表示待排序字符串 输出说明 输出
  • 虚拟现实期末考试

    考点 考试分比 考试题型单项选择题40 名词解释题10 简答题20 程序设计题8 综合题12 材料分析题10 等 选择题 名词解释 VR 虚拟现实技术 英文名称 Virtual Reality 缩写为VR 是20世纪发展起来的一项全新的实用
  • linux sudo su - 免密配置

    添加用户 sudo useradd d home awen m s bin bash awen 添加用户切换root免密配置 echo awen ALL ALL NOPASSWD ALL gt gt etc sudoers d 90 clo
  • 如何更改电脑开机密码

    以我的电脑为例 是Windows 10系统的笔记本电脑 想要重新设置开机密码 相信大家都有想重新设置密码的冲动 网上也有对应的教程 但是很多人都有一个疑问 为什么根据教程来修改却没有成功 或者是重新登录电脑发现密码根本没有变化 其实不然 这
  • 技术进化对风险隔离与屏蔽超过民众想象

    刷脸支付公众在收获着消费便捷快感的同时 更多地则对刷脸支付的安全性与风险性提出了质疑 与指纹 虹膜等相比 人脸具有弱隐私性的生物特征 而且正是由于手机这一介质的缺失 人脸信息的克隆与利用也会变得 更加容易 相应地 用户使用刷脸支付的风险也就
  • Linux系统卡在iscsi服务导致无法正常开机

    现象 存储网络断开了 机器再开机时卡在开机logo去挂载iscsi 导致没法正常开机 解决办法 1 进救援模式或者单用户模式 将iscsid服务开机自启关了并禁用 关闭自启可能还是存在会被唤醒的情况 systemctl disable is
  • Maven项目的两种打包方式-spring-boot-mavne-plugin/maven-jar-plugin

    Maven项目的两种打包方式 spring boot mavne plugin maven jar plugin 1 前言 Maven的两种打包方式 2 流程图 3 spring boor maven plugin打包 4 maven ja
  • Java架构师的10个学习经验分享,初学者必看

    从零基础学习Java 只要方法正确 依然可以学好Java编程 学习Java就像交朋友一样 要从陌生到熟悉再到铁杆搭档一生相伴的过程 随着深入的了解 你不但会发现学Java并不是和想象的那样无聊和困难 而且还有一些美妙之感 当然在拥有强大的技
  • SecureCRT8.5的下载、安装、注册、连接

    https blog csdn net qq 37233070 article details 120683434
  • 前端Blob文件导出

    前端Blob文件导出 前言 一 Blob是什么 二 axios 拦截器中做统一处理 三 页面全局封装下载组建 总结 前言 通过把blob转file对象的方法下载文件 一 Blob是什么 Blob 对象表示一个不可变 原始数据的类文件对象 B
  • 了解一下Java的日志体系

    目录 了解日子框架体系 分析日志框架如何转换 logback日志的集成 SpringBoot日志使用 常见的一些日志框架如 commons logging jar log4j jar sl4j api jar等 他们之间是存在一定关系的 在
  • mysql错误解决(2003、1045 2800)

    1 2003解决 在D mysql 5 7 26 winx64中新建文件夹data 在bin中进入cmd 运行 mysqld initialize 等一段事件后 重启mysql服务 2 1045 2800 在my ini加入skip gra
  • 【机器学习 & 深度学习】通俗讲解集成学习算法

    目录 集成学习 一 机器学习中的集成学习 1 1 定义 1 2 分类器 Classifier 1 2 1 决策树分类器 1 2 2 朴素贝叶斯分类器 1 2 3 AdaBoost算法 1 2 4 支持向量机 1 2 5 K近邻算法 1 3
  • Pytorch使用NN神经网络模型实现经典波士顿boston房价预测问题

    Pytorch使用多层神经网络模型实现经典波士顿boston房价预测问题 波士顿房价数据集介绍 波士顿房价数据集是一个经典的机器学习数据集 用于预测波士顿地区房屋的中位数价格 该数据集包含了506个样本 每个样本有13个特征 包括城镇的各种
  • Vscode配置已有工程及自动格式化

    这里写目录标题 前言 配置CMake 配置clang clang tidy clang format clangd clang tidy clang format 前言 最近一直在用vscode写代码 发现vscode一旦配置好了真的好用