两个月前我写过一篇博客 Windows VS Code 配置 C/C++ 开发环境 ,主要介绍了在 VS Code 里跑简单 C 程序的一些方法。不过那篇文章里介绍的方法仅适用于单文件程序,所以稍微大一点的项目就力不从心了。

但是对于课程设计这类,说大不大说小也不算小的 C++ 项目,也不是特别想用大型 IDE(如VS)……所以我更新了一下相关的 VSC 配置,使其也能用于多文件的 C++ 项目。

为了方便以后复用,也给其他有类似需求的人一个参考,相关的配置文件整理如下(新建项目时复制一份到 .vscode 里就行了)。

这一年来 VS Code 的 C/C++ 扩展 更新了不少,还支持在 WSL 里 Remote 开发了。不过本文中还是继续以 Windows 下的 MinGW-w64 为例。WSL 的配置也差不多,有兴趣的可以看看参考链接里的官方文档。

c_cpp_properties.json

  1. {
  2. "configurations": [
  3. {
  4. // 配置的名称,可以添加多个在编辑器右下角切换
  5. "name": "MinGW",
  6. "intelliSenseMode": "gcc-x64",
  7. // 这里的编译器路径,包括下面的一些选项都只是
  8. // 给 IntelliSense 用的,和具体项目构建没关系
  9. "compilerPath": "C:\\Portable\\mingw64\\bin\\gcc.exe",
  10. "includePath": [
  11. "${workspaceFolder}/**"
  12. ],
  13. "defines": [],
  14. "cStandard": "c11",
  15. "cppStandard": "c++17"
  16. }
  17. ],
  18. "version": 4
  19. }

tasks.json

  1. {
  2. // See https://go.microsoft.com/fwlink/?LinkId=733558
  3. // for the documentation about the tasks.json format
  4. "version": "2.0.0",
  5. "tasks": [
  6. {
  7. // 任务标签名
  8. "label": "compile",
  9. // 任务类型
  10. "type": "shell",
  11. // 编译器选择
  12. "command": "g++",
  13. // 编译预执行的命令集
  14. "args": [
  15. "-g",
  16. "\"${file}\"",
  17. "-o",
  18. "\"${fileDirname}\\${fileBasenameNoExtension}\""
  19. ],
  20. // 任务输出配置
  21. "presentation": {
  22. "reveal": "always",
  23. "panel": "shared",
  24. "focus": false,
  25. "echo": true
  26. },
  27. // 任务所属组名
  28. "group": "build",
  29. // 编译问题输出匹配配置
  30. "problemMatcher": {
  31. "owner": "cpp",
  32. "fileLocation": "absolute",
  33. "pattern": {
  34. "regexp": "^(.*):(\\d+):(\\d+):\\s+(error):\\s+(.*)$",
  35. "file": 1,
  36. "line": 2,
  37. "column": 3,
  38. "severity": 4,
  39. "message": 5
  40. }
  41. }
  42. },
  43. {
  44. "type": "shell",
  45. "label": "C/C++: g++.exe build active file",
  46. "command": "C:\\Portable\\mingw64\\bin\\g++.exe",
  47. "args": [
  48. "-g",
  49. "${file}",
  50. "-o",
  51. "${fileDirname}\\${fileBasenameNoExtension}.exe"
  52. ],
  53. "options": {
  54. "cwd": "${workspaceFolder}"
  55. },
  56. "problemMatcher": [
  57. "$gcc"
  58. ],
  59. "group": {
  60. "kind": "build",
  61. "isDefault": true
  62. }
  63. }
  64. ]
  65. }

launch.json

  1. {
  2. "version": "0.2.0",
  3. "configurations": [
  4. {
  5. // 使用 GDB 调试程序
  6. "name": "(gdb) Launch",
  7. "type": "cppdbg",
  8. "request": "launch",
  9. // 之前编译好的可执行文件路径
  10. "program": "${workspaceFolder}/build/${workspaceFolderBasename}.exe",
  11. "args": [],
  12. "stopAtEntry": false,
  13. // 设置 cwd 到 build 目录
  14. "cwd": "${workspaceFolder}/build",
  15. "environment": [],
  16. // 不要在集成终端里运行程序
  17. "externalConsole": true,
  18. "MIMode": "gdb",
  19. // 调试器可执行文件的路径
  20. "miDebuggerPath": "C:\\Portable\\mingw64\\bin\\gdb.exe",
  21. "setupCommands": [
  22. {
  23. "description": "Enable pretty-printing for gdb",
  24. "text": "-enable-pretty-printing",
  25. "ignoreFailures": true
  26. }
  27. ],
  28. // 调试前先运行 compile(定义在上面的 tasks.json 里)
  29. "preLaunchTask": "compile"
  30. }
  31. ]
  32. }

稍微解释一下这些文件的作用。

这三个文件都是放在项目的 .vscode 目录下的,其中 c_cpp_properties.json 用于配置 VSC 的 C/C++ 扩展,tasks.json 配置项目的构建流程,launch.json 则是配置如何运行(或调试)构建好的程序。

在 VSC 内编辑这些配置文件时,鼠标移动到 JSON 的 key 上就可以查看相关配置项的说明,非常方便。另外 c_cpp_properties.json 这个文件,也可以通过 Ctrl + Shift + P 面板运行 C/C++: Edit Configurations (UI) 命令打开图形化配置页面。关键配置项的作用都已经在上面的注释里说明了,就不再赘述。

最终整个项目的目录结构应该是这样的:

  1. $ tree -a
  2. .
  3. ├── .vscode
  4. ├── c_cpp_properties.json
  5. ├── launch.json
  6. ├── settings.json
  7. └── tasks.json
  8. ├── build
  9. └── vscode-cpp-quick-setup.exe
  10. └── src
  11. ├── Greeter.cpp
  12. ├── Greeter.h
  13. └── main.cpp

所有源代码放在 src 目录中,编译后的可执行文件将以当前 workspace 命名(一般是目录名),存放于 build 目录中。

VS Code C++ 项目快速配置模板的更多相关文章

  1. 携程Apollo(阿波罗)配置中心在Spring Boot项目快速集成

    前提:先搭建好本地的单机运行项目:http://www.cnblogs.com/EasonJim/p/7643630.html 说明:下面的示例是基于Spring Boot搭建的,对于Spring项目 ...

  2. Android Studio 配置快速生成模板代码

    前言 Android studio 有提供快速生成模板代码的功能,其实这个功能也可以自定义配置.此篇博客将讲解如何使用此功能 进入Settings 选择 Editor > Live Templa ...

  3. 携程Apollo(阿波罗)配置中心在.NET Core项目快速集成

    .NET Core的支持文档大体上可以参考文档.Net客户端使用指南:https://github.com/ctripcorp/apollo/wiki/.Net%E5%AE%A2%E6%88%B7%E ...

  4. 肝了一个半月的 Java 项目快速开发脚手架:Chewing

    前言 闲来无事,整一个 Java 项目快速开发脚手架. 正文 一.简介 Chewing 是一个简单的 Java 项目快速开发脚手架.既适合需要开发小型项目的小伙伴使用,也适合刚入门的新手用来学习一些常 ...

  5. Log4net快速配置使用指南。(快速搭建log4net日志平台手册)

    每做一个新项目,都会用到log4net,但总是忘记如何快速配置.有时在网上搜半天也找不到好的模板,大都在介绍参数的使用,在此做下总结,争取下次用时仅10分钟就可搭建好log4net. 直接上介绍的步骤 ...

  6. VS Code做项目的笔记

    需要自己研究的东西:http://www.bootcss.com/ 画页面时的布局插件:http://blog.chinaunix.net/uid-22414998-id-2878529.html v ...

  7. Sitecore CMS中配置模板部分

    如何在Sitecore CMS中配置模板部分. 注意: 本教程将扩展于“Sitecore CMS中创建模板”的章节. 配置折叠状态 配置模板部分的折叠状态允许用户选择默认折叠或展开哪些模板部分.此设置 ...

  8. Yii2 的快速配置 api 服务 yii2-fast-api

    yii2-fast-api yii2-fast-api是一个Yii2框架的扩展,用于配置完善Yii2,以实现api的快速开发. 此扩展默认的场景是APP的后端接口开发,因此偏向于实用主义,并未完全采用 ...

  9. Umi 小白纪实(一)—— 创建项目&常用配置

    umi 是一个企业级 react 应用框架,也是蚂蚁金服的底层前端框架 <蚂蚁金服的前端框架和工程化实践> 一.安装脚手架 在创建项目之前,需要保证有 node 8.10 以上的环境 可以 ...

随机推荐

  1. 4G DTU为什么要具有透传的功能

    4G DTU为什么要透传 透传的目的就是为了在数据传输的过程中不对数据做任何出来,实现发送方和接收方的数据完全一样,长度和内容完全没有变化.它主要是使用在智能设备之间的远程串口数据传输,是一种和传输方 ...

  2. Python爬虫之多线程

    详情点我跳转 关注公众号"轻松学编程"了解更多. 多线程 在介绍Python中的线程之前,先明确一个问题,Python中的多线程是假的多线程! 为什么这么说,我们先明确一个概念,全 ...

  3. 打印Sql查询语句

    如果在使用了yii的查询语句的话,可以打印本次的Sql,可以用 $model->find()->createCommand()->getRawSql();此语句返回的就是sql查询语 ...

  4. [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)

    题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...

  5. Photoshop CC 习惯设置

    安装后,一般设置: 1.编辑--首选项--常规 2.一般更改内容为: 性能 内存使用情况在50%-80%之间 暂存盘:除去C盘意外的其他盘 单位和标尺:以px为单位 其他根据喜好设定!

  6. JDK新特性-Lambda表达式的神操作

    一.Lambda表达式的介绍 Lambda表达式是 Java8 中最重要的新功能之一.使用 Lambda 表达 式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看 起来更简洁易懂.Lambd ...

  7. 天啦撸!打印日志竟然只晓得 Log4j?

    空了的时候,我都会在群里偷偷摸摸地潜水,对小伙伴们的一举一动.一言一行筛查诊断.一副班主任的即时感,让我感到非常的快乐,略微夹带一丝丝的枯燥. 这不,我在战国时代读者群里发现了这么一串聊天记录: 竟然 ...

  8. 微服务通信之feign的配置隔离

    前言 由上文我们知道针对某一个Feign接口,我们可以给他设置特定的配置类.那如果现在有一个服务,我们只想对A服务配置一个拦截器拦截请求而不影响其他服务,那应该怎么做呢? 一.feign接口配置 由前 ...

  9. ceph luminous bluestore热插拔实现

    需求描述 在某些测试场景下面,需要满足能够拔盘以后在插入的时候能够自动上线磁盘,这个需求实际在生产中是不建议使用的,原因是插入的磁盘如果本身存在问题,那么拉起的操作可能会破坏了本身集群的稳定性,所以这 ...

  10. 3、Spring Boot日志

    1.日志框架 市面上的日志框架:JUL.JCL.Jboss-logging.logback.log4j.log4j2.slf4j.... 日志门面 (日志的抽象层) 日志实现 JCL(Jakarta ...