Ubuntu:VS Code上C++的环境配置

使用 VSCode 开发 C/C++ 程序 , 涉及到 工作区的.vscode文件夹下的3个配置文件(均可以手动创建) :

① tasks.json : 编译器构建 配置文件 ;

② launch.json : 调试器设置 配置文件 ;

③ c_cpp_properties.json : 编译器路径和智能代码提示 配置文件 ;

下面开始逐个生成 上述配置文件:

涉及到的常用保留字

  • ${userHome} -用户的主文件夹路径
  • ${workspaceFolder} -在VS Code中打开的文件夹路径
  • ${workspaceFolderBasename} -在VS Code中打开的文件夹名,不带任何斜杠(/)   //不是路径
  • ${file} -当前打开的文件
  • ${fileWorkspaceFolder} -当前打开文件的工作空间文件夹
  • ${relativeFile} -当前打开的文件相对于工作区文件夹
  • ${relativeFileDirname} -当前打开的文件相对于工作区文件夹的dirname目录名
  • ${fileBasename} -当前打开的文件的basename
  • ${fileBasenameNoExtension} -当前打开的文件的basename,没有文件扩展名
  • ${fileExtname} -当前打开的文件的扩展名
  • ${fileDirname} -当前打开文件的文件夹路径
  • ${fileDirnameBasename} -当前打开的文件的文件夹名称
  • ${cwd} -任务运行器在VS Code启动时的当前工作目录
  • ${lineNumber} -当前在活动文件中选择的行号
  • ${selectedText} -当前在活动文件中选择的文本
  • ${execPath}—正在运行的VS Code可执行文件的路径
  • ${defaultBuildTask} -默认构建任务的名称
  • ${pathSeparator} -操作系统用来分隔文件路径中组件的字符

一、tasks.json 编译器构建配置文件

tasks.json 编译器构建配置文件 , 用于告诉 VSCode 如何去编译这个程序 ;

1、创建:

菜单栏选择 " 终端 / 配置默认生成任务 " ,或者快捷键Ctrl+Shift+P调出命令面板,输入tasks,选择Tasks:Configure Default Build Task进行配置。

在弹出的对话框中 , 选择第 2 项 , " C/C++:g++ 生成活动文件 " 选项 ;

点击该选项 , 即可在 .vscode 目录中生成 tasks.json 文件,如下:

{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: g++ build active file","command": "/usr/bin/g++","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "compiler: /usr/bin/g++"}]
}

注: VScode支持使用 ${variableName} 语法在配置文件中实现键值字符串的变量替换。

2、分析:

"label": "C/C++: g++ 生成活动文件", 是编译 C/C++ 任务名称 , 该任务名称可以自定义 ;

"command": "/usr/bin/g++", 中的 command 配置 , 是指定编译器 , 一般是 gcc 或者 g++ 编译器 ;

"args" 数组 , 配置的是 command 指定的编译器后的编译选项。args 数组包含将传递给 g++ 的命令行参数(必须按照编译器预期的顺序指定)。"${file}"表示当前打开的待编译的活动文件,对它进行编译,并在当前路径${fileDirname}生成与活动文件同名无后缀的可执行文件"${fileDirname}/${fileBasenameNoExtension}"。

			"args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}"],

"group" 中的 "isDefault": true 指的是 , 使用 Ctrl + Shift + B 快捷键可以运行该任务 ;如果设置为 false , 需要从终端菜单中 , 选择 " 运行任务 " 来编译运行程序Terminal>Run Build Task

			"group": {"kind": "build","isDefault": true},
3、执行编译

①回到活动文件helloworld.cpp

②执行tasks.json中定义的编译任务。快捷键ctrl+shift+B或者从菜单中选择运行:Terminal>Run Build Task

③任务开始时,源代码编辑器下方将出现集成终端面板。任务执行完成后,终端会显示编译结果,对于成功的 g++编译,输出类似如下:

④如下图,点击+按钮将创建一个以当前工作目录(本案例中是helloworld)默认运行的shell终端。输入指令ls查看当前目录下所有文件,可以看到编译生成的可执行文件helloword。

⑤终端中输入 ./helloworld ,即可运行可执行文件helloworld

4、修改task.json

可以修改 tasks.json来满足一些特定需求。比如,

将"${file}"替换“${workspaceFolder}/*.cpp”来构建多个 C++ 文件;

将“${fileDirname}/${fileBasenameNoExtension}”替换为硬编码文件名(如“helloworld.out”)来修改输出文件名。

二、c_cpp_properties.json 编译器路径和智能代码提示配置文件
这个json是C或C++语言按需配置的文件。可以告诉VSCode查找include文件的路径,C文件和CPP文件的解析标准等。
1、创建:
快捷键Ctrl+Shift+P调出命令面板,输入C/C++,选择Edit Configurations(UI)进入配置。设置编辑器路径和IntelliSense模式。
2、解析

{"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**"    // **表示递归搜索该文件夹下所有文件],"defines": [],"compilerPath": "/usr/bin/gcc",    // 告诉系统编译器地址"cStandard": "c89",                // 告诉系统对C文件使用的C标准"cppStandard": "c++98",           // 告诉系统对CPP文件使用的C++标准"intelliSenseMode": "linux-gcc-x64"    // 不是太清楚,大概是告诉系统智能识别的模式。}],"version": 4
}
三、lunch.json 调试器设置 配置文件

1、创建

launch.json 文件用于在 Visual Studio Code 中配置调试器。接下来将创建launch.json 文件。

从主菜单中,选择 Run > Add Configuration...,选择C++ (GDB/LLDB)。 之后将看到展示各种预定义调试配置的下拉列表,选择 g++ build and debug active file。将自动生成launch.json文件。

2、分析(参考示例):


{//Use Intellisense to learn about possible attributes.//Hover to view descriptions of existing attributes.//For more information,visit: https://go.microsoft.com/fwlink/?linkid=830387"version":"0.2.0","configurations":[{"name":"myexe : makefile build and debug",    //name随便取,用来在定义了多个configuration的时候区分执行的是哪一套参数。"type":"cppdbg",        //这个一般就不要改了,这个我还不了解其他的参数配置"request":"launch",    //这个一般就不要改了,这个我还不了解其他的参数配置"program":"${workspaceRoot}/myexe",    //执行这个文件,相当于命令行中输入这行"args":["param1","param2","2>&1",">","out"],    //program的参数,相当于命令行中在program后输入用空格隔开的这些参数。我这里前两个是执行文件自带的参数设置,后三个是将标准输出和标准错误输入到文件out中。"stopAtEntry":false,    //大概是表示是否在main函数处停下,类似在main上打断点。"cwd":"${workspaceRoot}",    //表示在哪个目录下执行program,相当于命令行中输入cd 该行"environment":[]            //不知道干嘛的//"externalConsole":true,    //如果使用控制台则需要打开这个。我这边加了这句后会有不知道在使用哪个控制台的问题,反正会很奇怪,就注释掉了。"MIMode":"gdb",            //使用哪个工具作为调试工具,只有两个选择gdb或lldb。lldb我不了解,和我一样不了解的人就写gdb吧。"miDebuggerPath":"/usr/bin/gdb",    //调试工具的路径"setupCommands":[    //gdb相关的一些设置命令,相当于在执行gdb后,对gdb下命令行的设置。gdb相关的初始化配置,要在~/.gdbinit文件中配置,或者在这配置,我另开一篇文章写,涉及下面enable-pretty-printing的,不一定开了就有用了,还涉及其他的问题,这里先放个TODO。{"description":"Enable pretty-printing for gdb",    //给人看的描述"text":"-enable-pretty-printing",        //gdb下执行的命令,启用整齐打印,就是让gdb打印的东西好看一点。"ignoreFailures":true        //并不清楚这个实际用来干嘛},{"description":"Let User defined signal 1 not appear","text":"handle SIGUSR1 nostop noprint",    //这个命令是我自己加的,因为我的程序会莫名奇妙出现调试时在非断点出停下的问题,用这个可以规避/忽视这个问题。"ignoreFailures":true        //并不清楚这个实际用来干嘛}],//"internalConsoleoptions":"openOnSessionstart",    //不知道干嘛的"preLaunchTask":"build"    //执行program前需要执行的task,这里需要和task.json中要执行的task的label一致//"preLaunchTask":""        //如果没有tasks.json,或者不需要执行前置task,则可以这样写,或不写这行。这种情况一般是你已经有了带调试信息的可执行文件,不要在再通过编译等操作得到了。}]
}

settings.json
在tasks.json的配置中我们提到了settings.json,这个文件能设置哪些东西我没有了解太多。我这里只写我知道的。

{"files.associations": {    //这个配置可以指定某些include的库按照哪种语言去解析该文件。特别是一些没有后缀名或后缀名不正常的文件,比如"*.extension":"html"就是用html去解析所有后缀为.extension的文件。"atomic": "cpp",    "ostream": "cpp"},"mypath":"/home/username/xxx/yyy"    //通过这种设置就可以在其他本文讲到的json文件中通过${config:mypath}来获得mypath的值了。
}

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

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

相关文章

竞赛保研 基于GRU的 电影评论情感分析 - python 深度学习 情感分类

文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖,适合作为竞…

uniapp怎么动态渲染导航栏的title?

直接在接口请求里面写入以下: 自己要什么参数就写什么参数 本人仅供参考: this.name res.data.data[i].name; console.log(名字, res.data.data[i].name); uni.setNavigationBarTitle({title: this.name}) 效果:

界面控件DevExpress v23.2全新发布 - 官宣正式支持.NET 8

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多…

计算机网络(5):运输层

这一章应该是整个计算机网络对我们来说最重要的,也是用的最多的一部分。 运输层协议 进程之间的通信 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。…

c++ 使用 at()访问数组 抛出异常

1、说明 当我们定义一个数组vector b(10)后,b[]和b.at()都可以对v中元素进行访问,平时一般大家使用的都是v[]这种访问方法,以至于将v.at()这种访问方式忘记了。 2、vector[]和vector.at()的区别 b.v[]和b.at()都可以对v中元素进行访问&…

12.23C语言 指针

& 地址运算符,用于取地址 /*注释内容*/ //注释一行 *的意思:1.算术运算符 2.用于指针声明int *ptr;表示这个变量是一个指针3.数组元素访问:在数组名后面使用 * 可以表示数组的起始地址。例如: int arr[5] {1, 2, 3, 4, 5…

【5G PHY】NR参考信号功率和小区总传输功率的计算

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

超分辨数据集:Set5 Set14 BSD100 Urban100 Manga109

DIV2K数据集官网上很好找到,但是网上流传的Set5 14 BSD100,Urban100 Manga109都是私人进行处理过的版本,各个处理方式都不同,为了统一方式写了这篇文章。 官方的DIV2K x2、x3、x4的LR图片使用下面matlab代码生成(已经经过测试最后…

单例模式实现

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:JavaEE 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 单例模式 1. 什么是单例模式2. 饿汉模式3.…

帮助谷歌从40人裂变为60000人的OKR是啥?

OKR(Objectives and Key Results)是一种目标管理方法,旨在帮助组织和个人明确目标并衡量成功。在谷歌的发展过程中,OKR扮演了至关重要的角色,帮助公司从40人规模快速成长为60000人的科技巨头。 OKR适用于各种类型的企…

Git安装和使用教程,并以gitee为例实现远程连接远程仓库

文章目录 1、Git简介及安装2、使用方法2.1、Git的启动与配置2.2、基本操作2.2.1、搭建自己的workspace2.2.2、git add2.2.3、git commit2.2.4、忽略某些文件不予提交2.2.5、以gitee为例实现git连接gitee远程仓库来托管代码 1、Git简介及安装 版本控制(Revision cont…

阿里云吴结生:云计算是企业实现数智化的阶梯

云布道师 近年来,越来越多人意识到,我们正处在一个数据爆炸式增长的时代。IDC 预测 2027 年全球产生的数据量将达到 291 ZB,与 2022 年相比,增长了近 2 倍。其中 75% 的数据来自企业,每一个现代化的企业都是一家数据公…