Vscode配置CC++编程环境的使用体验优化和补充说明

文章目录

    • 快速编译运行👺
      • code runner插件方案
        • Code Runner Configuration
      • 直接配置
    • 相关指令和快捷键
      • 默认task配置和取消默认
    • 配置文件补充介绍(可选 推荐阅读)😊
      • 使用vscode预置变量和环境变量
      • 环境变量的使用
        • 使用环境变量的好处
        • 环境变量可能引起的问题
      • 检查编译器所在目录是否正确配置进Path变量
      • 简化编译器和调试器的路径

快速编译运行👺

如果您的编程场景相对简单,比如仅仅是写一些算法题(比如学生党)或者是检查验证某些语言特性或验证猜想,这类用途下只要将所有代码放到同一个源文件中(.c/.cpp)中,那么使用快捷键快速编译运行将会是更快捷的方法

您当然可以选择通用而灵活的命令行做编译运行操作,但是远不如快捷键来的方便,不过对于复杂编译场景或需求,还是用命令比较合适,比如需要频繁修改编译参数,或者需要编译多个文件等复杂情况

vscode中编译和调试可以分开,编译环节可以使用命令Run build task(command palette),或者使用快捷键启动,这么做可以实现快速编译,跳过调试(gdb)部分,但是不会自动运行编译出来的程序,仍然不够快捷

code runner插件方案

主打快捷地编译运行,不考虑复杂的编译需求和方案选项,也不考虑调试操作,但是这已经能够满足基本的c/c++编程环境的需要了

这里的快捷键快速编译运行采用的方案是使用插件:

Code Runner - Visual Studio Marketplace

本方案是相对独立的方案,甚至不需要使用c/c++扩展,只要安装了c/c++编译器,安装code runner插件,配置环境变量或者提供编译器程序的绝对路径

  • 这个方案虽然简单,但是意味着补全和提示,断点调试功能会受到影响,所以仍然建议配置以下c/c++插件,code runner 插件作为快速编译运行的选项灵活使用(可以选择独立或不同版本的编译器,提供编译器绝对路径即可)

为了兼容中文源文件名的编译,这里给出c/cpp两种语言的源文件编译的配置json

这里默认将编译结果的文件名设置为a.exe,并且运行也是用这个名字

"c": "cd $dir && g++ -std=c++11 -finput-charset=UTF-8 -fexec-charset=gbk \"$fileName\" -o \"a.exe\" &&  .\\\"a.exe\"",
"cpp": "cd $dir && g++ -std=c++11 -finput-charset=UTF-8 -fexec-charset=gbk \"$fileName\" -o \"a.exe\" &&  .\\\"a.exe\"",


如果你想要保留源文件的名字(兼容中文),也是可以的,这里使用-finput-charset=UTF-8 -fexec-charset=gbk来指定中文文件名编码,并且使用了预设变量 $fileName,$fileNameWithoutExt

// "c": "cd $dir && g++ -std=c++11 -finput-charset=UTF-8 -fexec-charset=gbk \"$fileName\" -o \"$fileNameWithoutExt.exe\" &&  .\\\"$fileNameWithoutExt.exe\"",

\\"cpp": "cd $dir && g++.exe -std=c++11 -finput-charset=UTF-8 -fexec-charset=gbk \"$fileName\" -o \"$fileNameWithoutExt.exe\" &&  .\\\"$fileNameWithoutExt.exe\"",
// "cpp": "cd $dir && C:\\exes\\RedPanda-CPP\\mingw64\\bin\\g++.exe -std=c++11 -finput-charset=UTF-8 -fexec-charset=gbk \"$fileName\" -o \"$fileNameWithoutExt.exe\" &&  .\\\"$fileNameWithoutExt.exe\"",

产检相关配置文档:(详情查看上述链接)

Code Runner Configuration
  • Make sure the executor PATH of each language is set in the environment variable.
  • You could also add entry into code-runner.executorMap to set the executor PATH. e.g. To set the executor PATH for ruby, php and html:
{
    "code-runner.executorMap": {
        "javascript": "node",
        "php": "C:\\php\\php.exe",
        "python": "python",
        "perl": "perl",
        "ruby": "C:\\Ruby23-x64\\bin\\ruby.exe",
        "go": "go run",
        "html": "\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\"",
        "java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
        "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
    }
}

Supported customized parameters

  • $workspaceRoot: The path of the folder opened in VS Code
  • $dir: The directory of the code file being run
  • $dirWithoutTrailingSlash: The directory of the code file being run without a trailing slash
  • $fullFileName: The full name of the code file being run
  • $fileName: The base name of the code file being run, that is the file without the directory
  • $fileNameWithoutExt: The base name of the code file being run without its extension
  • $driveLetter: The drive letter of the code file being run (Windows only)
  • $pythonPath: The path of Python interpreter (set by Python: Select Interpreter command)

Please take care of the back slash and the space in file path of the executor

  • Back slash: please use \\
  • If there ares spaces in file path, please use \" to surround your file path

直接配置

  • 使用launch.json启动编译和调试虽然可以一键执行,但是速度比较慢

  • 要知道直接用g++命令行编译是很快的,所以我们可以设法改进这一点

  • 我们可以用Code Runner插件来快速执行编译并直接运行,而不是编译后启动调试运行

    • Code Runner - Visual Studio Marketplace
  • 我们以hellow,world为例

    • 配置后按下快捷键可以有如下效果

      PS C:\repos\C_CPP_ConsoleApps> cd "c:\repos\C_CPP_ConsoleApps\cpp\" ; if ($?) { g++ -std=c++11 "hellowworld2.cpp" -o "hellowworld2.exe" } ; if ($?) {  .\"hellowworld2.exe" }
      Hello World!
      
    • 如果使用默认的start debugging,速度要慢上许多

      • PS C:\repos\C_CPP_ConsoleApps>  & 'c:\Users\cxxu\.vscode\extensions\ms-vscode.cpptools-1.20.3-win32-x64\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-pcmtfxlj.w4p' '--stdout=Microsoft-MIEngine-Out-f12ge22g.01f' '--stderr=Microsoft-MIEngine-Error-i3ud5s4n.nq2' '--pid=Microsoft-MIEngine-Pid-cwud2zvq.q2k' '--dbgExe=C:\msys64\ucrt64\bin\gdb.exe' '--interpreter=mi' 
        Hello World!
        
  • 配置tasks.json(不推荐)

    • "args": [
              "-fdiagnostics-color=always",
              // "-g",
              "${file}",
              "-o",
              "${fileDirname}\\a.exe",
              "&&",
              "a.exe"
          ],
      
    • 您或许考虑创建一个task令其编译完成后追加运行

    • 但是这并不好用,估计vscode c++ extension并没有打算让用户这么用

      • 如果仅仅是输出hello,world 这种程序还要,但是如果先要输入,那么build task就会被卡住

相关指令和快捷键

  • commandshutcut(default)Notes
    Debug:start DebuggingF5最常用的快捷键,一键编译运行源代码,并且可以设置支持打断点调试
    Tasks:Run Build Task仅编译源代码,可以得到编译后的可执行的二进制文件,但是不会运行,通常是作为Start Debugging的第一个步骤,比较少单独使用
    Debug:Select and Start Debugging选择一个debug方案,特别是您已经配置了多个方案时,
    Tasks:Config Default Build Task选择默认的task配置,为了适应不同的编译需要,用户在task.jsonlaunch.json中可以配置多个版本;可以从中选择一个最常用的配置
    Tasks:Config Task配置task,最后会跳转到tasks.json文件中的某一个tasks数组中的一个对象,每个对象对应一个task配置

相关快捷键可以自行修改

  • 相关指令操作说明
    在这里插入图片描述我这里配置了3个task,为了名称简洁,以及方便引用,我把各个对象中的Label字段简单重名为task x的形式;
    您可以利用这个命令tasks:configure
    在这里插入图片描述command paletee中输入:Run C/C++ File
    在这里插入图片描述
    在这里插入图片描述
    tasks:run build task可以列出配置在tasks.json中的build task,(但是如果配置了默认task,可能不会列出全部的task);
    如果取消掉所有设置默认的task,就会列出所有tasks;
    选中其中的一个,可以启动编译,顺利的话会得到一个可执行二进制文件;
    在这里插入图片描述可以从command palette输入Debug:Select and Start Debugging进行选择debug方案
    在这里插入图片描述也可以找到侧边的按钮中得到列表内选择一个debug方案;
  • 如果刚刚配置好tasks.json,launch.json但是列表中没有显示出来对应的方案,可以尝试重载vscode窗口(或者重启vscode)

  • 如果始终没有,可能是配置文件(json)出错了

默认task配置和取消默认

  • tasks.json中的某个task中设置"group"对象

  • //配置默认的build task(注意不要多个task争抢默认build)
    // 非默认的task的"group"字段配置为:"group":"build",或考虑将"isDefault"设置为false
    "group": {
        "kind": "build",
        "isDefault": false //改为true就表示设置为默认
    },
    

配置文件补充介绍(可选 推荐阅读)😊

  • 下面我给出自己的配置,其特点是基本满足各种编译需求,适用于轻量的C/C++编译
  • 在讲具体配置内容之前,先了解以下内容
  • tasks.json中的tasks数组
    • 每个元素是一个对象,视为一个build task,分别表示一种build源代码的方案
    • 首先我的建议是取一个合适的task名字,在各个task对象的label字段中配置,名字可以设置的简单一些
      • 不需要担心命名太简单而看不出配置的用途,因为我们可以在detail字段中写入详细的信息
      • 将label字段设置的简单的好处在于launch.json中的preLaunchTask引用起来就方便,尽管您可以复制粘贴label字段的值代替手动输入到preLaunchTask字段😊
  • launch.json中的configurations数组
    • 每个元素是一个对象,可以视为一个launch方案,表示如何调试源代码(包括使用哪个调试器(debugger),要启动哪一个build task,调试时要传递什么参数给调试器等)
    • 这里最重要的除了配置正确的调试器路径,还要设置启动正确的task名称,这些名称从tasks.json中的label字段查找,比如我在tasks.json中配置了3种build task方案分别名为task1,task2,task3那么合法的名字就只有上述3个
    • 当然默认产生的task 的label一般是C/C++: g++.exe build active file,这个东西可以按照自己的喜好和方便使用的角度修改
    • launch.json中有name字段可以写得详细一些,因为我们不需要再引用这里的name字段了
    • name字段的值会显示在选择debug方案的列表中,供我们辨认不同的debug方案和选择
  • 最后c_cpp_properties.json文件,不是必须要的,但是如果有需要可以配置一些库的路径,编译标准版本等

使用vscode预置变量和环境变量

  • Visual Studio Code Variables Reference

  • Visual Studio Code(VS Code)支持在调试和任务配置文件以及某些特定设置中使用变量替换。这些变量通过 ${variableName} 语法在 launch.jsontasks.json 文件中的键值字符串内实现替换。

  • 用户环境变量和系统环境变量的引用:假设我配置了用户环境变量MSYS2_MINGW,并且确认了该值的有效性

    • PS> $env:MSYS2_MINGW
      C:\msys64\ucrt64\bin
      
    • PS[BAT:79%][MEM:32.00% (10.14/31.70)GB][22:02:08]
      # [C:\repos\C_CPP_ConsoleApps]
        ls $env:MSYS2_MINGW |where{$_.Name -like "gcc.*" -or $_.Name  -like "g++.*" -or $_.Name -like "gdb.*"}
      
              Directory: C:\msys64\ucrt64\bin
      
      
      Mode                LastWriteTime         Length Name
      ----                -------------         ------ ----
      -a---         2023/12/2      2:14        2721152 󰣆  g++.exe
      -a---         2023/12/2      2:14        2718592 󰣆  gcc.exe
      -a---         2023/12/4     21:52       10370879 󰣆  gdb.exe
      
    • 我在配置C/C++的试验中,发现引用环境变量仅在launch.json中是有效的

      • "miDebuggerPath": "${env:MSYS2_MINGW}\\gdb"
        
    • 然而,在tasks.json中引用环境变量是无效的

环境变量的使用

使用环境变量的好处
  • 如果将相关路径添加到Path路径中,那么就可以直接用名字gcc,g++,gdb来代替绝对路径

    • 无论是先配置MSYS2_MINGW,然后将MSYS2_MINGW添加到Path,或者直接将路径MSYS2_MINGW对应的值(我的例子是C:\msys64\ucrt64\bin)添加到Path变量中都可以
    • 如果是用户级别的环境变量,不需要管理员权限
    • 总之这个任务很简单,资料也很丰富,这里不赘述;但是配置了以后很有用
      • 命令行输入 SystemPropertiesAdvanced.exe或者开始菜单中输入 环境变量搜索就可以打开配置的控制面板,点击环境变量进行配置,用户级别和系统级别的Path任选其一将路径添加到Path变量中即可;
      • 老手也可以选择用命令行配置,比如setx,powershell还可以用 [Environment]::SetEnvironmentVariable()来配置
环境变量可能引起的问题
  • 生产环境的环境变量配置需要考虑的问题更多,配置环境变量虽然能够提供方便,但是可能引入潜在的混淆的机会
  • 但是对于学习环境,配置环境变量是方便和可行的,也是很平常的事情

检查编译器所在目录是否正确配置进Path变量

  • 上面的路径配置不是必须的,但确实很有用,可以带来便利的操作

  • 通过以下命令来检查是否配置成功

    gcc --version
    g++ --version
    gdb --version
    
    
    
  • PS[BAT:79%][MEM:34.73% (11.01/31.70)GB][22:07:20]
    # [C:\repos\scripts]
    PS> gcc --version
    gcc.exe (Rev3, Built by MSYS2 project) 13.2.0
    Copyright (C) 2023 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    
    PS[BAT:79%][MEM:36.41% (11.54/31.70)GB][22:18:52]
    # [C:\repos\scripts]
    PS> g++ --version
    g++.exe (Rev3, Built by MSYS2 project) 13.2.0
    Copyright (C) 2023 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    
    PS[BAT:79%][MEM:36.41% (11.54/31.70)GB][22:18:52]
    # [C:\repos\scripts]
    PS> gdb --version
    GNU gdb (GDB) 14.1
    Copyright (C) 2023 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    
  • 上述命令各自没有报错,返回了各自的版本号,这说明配置是正确的

简化编译器和调试器的路径

  • 经过上述的Path变量配置,我们可以在vscode中得到以下效果
  • 可在任意终端中直接用gcc,g++,gdb来带直接调用相应的软件
  • 可以简化vscode中的相关配置(末尾的逗号是json中的不同字段的分割符)
    • tasks.json中的 "command": "C:\\msys64\\ucrt64\\bin\\g++.exe",可以简化为 "command": "g++",
    • launch.json中的"miDebuggerPath": "C:\\msys64\\ucrt64\\bin\\gdb.exe",简单用gdb来代替,即可以简化为"miDebuggerPath": "gdb",
  • 不仅如此,如果用的不是Msys2安装的gcc,g++,gdb而是其他方式安装的,比如直接用的MinGw安装的,那么我们也不需要去改动vscode中的配置文件,只需修改一下Path环境变量中gcc,g++,gdb的所在目录即可(通常这三个组件都是同一个目录)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux中rpm包和yum仓库介绍及入门配置

rpm包概述 RPM Package Manager,RPM包管理器 由红帽公司提出&#xff0c;适用于Rocky Linux、Redhat、SUSE等系列操作系统 建立集中数据库&#xff0c;记录软件包安装/卸载等变化信息&#xff0c;分析软件包依赖关系 RPM包 文件名特征 软件名-版本信息.操作系统.硬件架/构.r…

L 波段射频信号采集回放系统

L 波段采集回放系统是一套便携式模拟数字采集系统&#xff0c;该系统主要由射频输入模块、中频接收回放模块、FPGA 信号处理单元、服务器系统和存储单元等组成。 L 波段采集回放系统的功能主要用于对 950MHz〜2150MHz 模拟量射频信号的采集、存储记录与回放&#xff1b;采集与…

百度如何打造AI原生研发新范式?

&#x1f449;点击即可下载《百度AI原生研发新范式实践》资料 2024年10月23-25日&#xff0c;2024 NJSD技术盛典暨第十届NJSD软件开发者大会、第八届IAS互联网架构大会在南京召开。本届大会邀请了工业界和学术界的专家&#xff0c;优秀的工程师和产品经理&#xff0c;以及其它行…

Unity3D 开发教程:从入门到精通

Unity3D 开发教程&#xff1a;从入门到精通 Unity3D 是一款强大的跨平台游戏引擎&#xff0c;广泛应用于游戏开发、虚拟现实、增强现实等领域。本文将详细介绍 Unity3D 的基本概念、开发流程以及一些高级技巧&#xff0c;帮助你从零基础到掌握 Unity3D 开发。 目录 Unity3D…

Vue3和Springboot前后端简单部署

一、Vue3Springboot 的前后端简单部署 (在win下面部署) 1、前端实现部署 思想: 前端打包项目后、放到nginx中进行部署 1、nginx 安装 和 解压 1、下载 nginx.zip win版本 解压就可以 2、解压后、启动程序 3、访问 nginx 欢迎页面 http://localhost/ 80 端口 可以省略 直接访…

中仕公考:2025四川省考今日报名!

2025年四川省考今日开始报名啦&#xff01;准备参加考试的广大考生们不要错过报名时间哦&#xff01; 报名时间&#xff1a; 2024年11月1日至7日上午8:00 资格审查&#xff1a; 2024年11月1日至8日上午8:00 确认缴费&#xff1a; 2024年11月9日上午8:00 准考证打印&#xff…

css 同时实现渐变色和文字阴影(Vue 3 + TypeScript)

UI效果 渐变效果 直接添加text-shadow属性&#xff0c;发现阴影覆盖在了字体之上 解决&#xff1a; 利用::after伪类&#xff0c;将字体的阴影加在伪类之上。 <template><div class"app"><h1 ref"h1Ref">{{ title }}</h1></d…

从美颜SDK到实时视频美颜平台:开发美颜系统的技术解析

今天&#xff0c;笔者将围绕美颜SDK的基本功能、实时视频美颜平台的架构设计&#xff0c;以及实现美颜系统的关键技术进行深入解析。 一、美颜SDK的基础功能 美颜SDK&#xff08;Software Development Kit&#xff09;是实现美颜效果的核心工具包&#xff0c;它通常包含一系列…

【Linux】用户权限管理:创建受限用户并配置特定目录访问权限

本文详细介绍了如何在 Linux 系统中创建一个名为 agent 的新用户&#xff0c;并限制其在特定目录下的权限。通过使用 useradd 命令创建用户&#xff0c;并使用 usermod 命令将新用户添加到现有用户组中&#xff0c;确保其具有适当的权限。接着&#xff0c;通过 chown 和 chmod …

获英伟达二次投资!AI制药公司Terray完成1.2亿美元融资,构建全球最大化学数据集

近日&#xff0c;AI 制药公司 Terray Therapeutics 宣布完成 1.2 亿美元 B 轮融资&#xff0c;本轮融资将用于推进其内部免疫学项目的临床试验&#xff0c;并进一步完善公司的生成式 AI 平台 tNova。 据悉&#xff0c;本次 Terray 的融资由英伟达风险投资部门 NVentures 和新投…

LeetCode 热题 100之二叉树

1.二叉树的中序遍历 思路分析1&#xff08;递归&#xff09;&#xff1a;通过一个辅助函数 inorderHelper&#xff0c;递归地访问左子树、根节点和右子树&#xff0c;实现中序遍历。 具体实现代码&#xff08;详解版&#xff09;&#xff1a; class Solution { public:void i…

LLC电路 - 变压器匝比改变时的连锁反应

1.谐振电路等效电阻Rac 等效电阻从负载一侧映射过来&#xff0c;假定负载电阻为R&#xff0c;功率计算公式为U_out^2/R&#xff0c;则理想变压器因为Uin N*Uout&#xff0c;所以等效电阻的阻值变化是平方关系&#xff1a;Rref K*R*N^2.具体的计算公式为&#xff1a; Vp为变压…

Podman+Minikube:MacBook 运行 Kubernetes 最佳实践

简介 在现代软件开发中&#xff0c;Kubernetes作为容器编排的事实标准&#xff0c;已成为云原生应用的核心组成部分。对于开发者来说&#xff0c;在本地环境中搭建和测试Kubernetes集群显得尤为重要。而在这方面&#xff0c;结合MacBook、Podman和Minikube的组合&#xff0c;提…

【制造业&盒子】食品物品检测系统源码&数据集全套:改进yolo11-MultiSEAMHead

改进yolo11-efficientViT等200全套创新点大全&#xff1a;食品物品检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.11.01 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或…

性价比高的宠物净化器推荐!铲屎官们双十一不容错过的必备好物

秋天到了&#xff0c;我家毛孩子又开始爆毛&#xff01;一点都没有夸张&#xff0c;不仅家里到处都是它掉的毛&#xff0c;而且它自己也“膨胀”起来&#xff0c;身上都是脱落的毛发。 有时候没来得及清理&#xff0c;风一吹那些浮毛就飘到空气当中&#xff0c;呼吸的时候都感…

创建线程池时为什么不建议使用Executors进行创建

有没有想过为什么在创建线程池的时候我们一般都是通过ThreadPoolExecutor来创建线程池&#xff0c;很少使用Executors来创建线程池&#xff1f; 实践出真知&#xff0c;让我们具体在代码里面看看是什么原因~ 我们先用Executors来创建一个固定线程的线程池&#xff1a; Testpub…

基于STM32+华为云IOT设计的大棚育苗管理系统

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 1.5 模块的技术详情介绍【1】NBIOT-BC26模块【2】MQ135传感器【4】SHT30传感器【5】B1750传感器 二…

树莓集团:智慧园区的绿色生态与可持续发展

智慧园区作为现代信息技术与园区管理深度融合的新兴概念&#xff0c;已然成为当下备受瞩目的发展热点。简单来讲&#xff0c;它借助各类智能技术手段&#xff0c;全方位提升园区的管理、服务效率以及居住体验&#xff0c;绝非仅仅局限于一个物理空间&#xff0c;而是打造出一个…

心情追忆- AI dify工具

之前我独自开发了一个名为“心情追忆”的小程序&#xff0c;旨在帮助用户记录日常的心情变化及重要时刻。 项目需求来源->设计->前端(小程序)->后端->部署均由我一人完成. 上线一个月. 通过群聊分享等. 用户量也有了100多人. 我希望持续发展. 然后今天又产生了一…

.net framework 3.5sp1开启错误进度条不动如何解决

浏览器地址栏输入www.dnz9.com远程解决netframework问题 在Windows操作系统上安装或启用.NET Framework 3.5 SP1时&#xff0c;如果遇到进度条不动的问题&#xff0c;可能由多种原因引起。以下是一些可能的解决方案&#xff1a; 1. 使用Windows功能对话框 1.打开“控制面板”。…