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.mzph.cn/news/241431.shtml

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

相关文章

神经网络:机器学习基础

【一】什么是模型的偏差和方差? 误差(Error) 偏差(Bias) 方差(Variance) 噪声(Noise),一般地,我们把机器学习模型的预测输出与样本的真实label…

详解FreeRTOS:专栏总述

目录 1、理论篇 2、基础篇 3、进阶篇 4、高级篇 5、拓展篇 本专栏基于FreeRTOS底层源码介绍了嵌入式实时操作系统的概念,FreeRTOS任务创建、任务调度、任务同步与消息传递,软件定时器、事件通知等知识。 主要分为5方面内容:理论篇、基础…

Python中json模块的使用与pyecharts绘图的基本介绍

文章目录 json模块json与Python数据的相互转化 pyecharts模块pyecharts基本操作基础折线图配置选项全局配置选项 json模块的数据处理折线图示例示例代码 json模块 json实际上是一种数据存储格式,是一种轻量级的数据交互格式,可以把他理解成一个特定格式…

spring核心组件详细分析图

文章目录 spring核心组件 spring核心组件 spring七大组成部分 1、核心容器 这是Spring框架最基础的部分,它提供了依赖注入(DependencyInjection)特征来实现容器对Bean的管理。这里最基本的概念是BeanFactory,它是任何Spring应用…

python dash 写一个登陆页 4

界面 代码: 这里引入了dash_bootstrap_components 进行界面美化 ,要记一些className,也不是原来说的不用写CSS了。 from dash import Dash, html, dcc, callback, Output, Input, State import dash_bootstrap_components as dbcapp Dash(…

深入理解.net运行时方法表

在.net运行时,每一个类型在创建第一个实例,或者静态成员被第一次访问,或者被反射创建时,就会创建一个与该类型关联的方法表: 基本结构大概如下: -------------------------- | Method Table …

持续集成交付CICD:Jira 远程触发 Jenkins 实现更新 GitLab 分支

目录 一、实验 1.环境 2.GitLab 查看项目 3.Jira新建模块 4. Jira 通过Webhook 触发Jenkins流水线 3.Jira 远程触发 Jenkins 实现更新 GitLab 分支 二、问题 1.Jira 配置网络钩子失败 2. Jira 远程触发Jenkins 报错 一、实验 1.环境 (1)主机 …

HarmonyOS构建第一个JS应用(FA模型)

构建第一个JS应用(FA模型) 创建JS工程 若首次打开DevEco Studio,请点击Create Project创建工程。如果已经打开了一个工程,请在菜单栏选择File > New > Create Project来创建一个新工程。 选择Application应用开发&#xf…

Docker知识总结

Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用应用的安装 掌握docker迁移与备份相关命令 能够运用Dockerfile编写创建容器的脚本 能够…

go语言学习计划。

第1周:Go语言概述与环境搭建 内容:了解Go语言的历史、特点和应用场景。安装Go环境,配置工作区。实践:编写第一个Go程序,了解Go的编译运行流程。 第2周:基本语法与数据类型 内容:学习基本数据…

排序算法——基数排序

将需要排序的各个数当做元素,集合组成数组,对数组中的元素进行排序,再开辟一个临时数组的空间将数组中已有的元素数值当做临时数组的下标储存在临时数组中,然后用区别初始化值的方法区别出临时数组中待排数组的元素,以…

全方位掌握卷积神经网络:理解原理 优化实践应用

计算机视觉CV的发展 检测任务 分类与检索 超分辨率重构 医学任务 无人驾驶 整体网络架构 卷积层和激活函数(ReLU)的组合是网络的核心组成部分 激活函数(ReLU) 引入非线性,增强网络的表达能力。 卷积层 负责特征提取 池化层…

[MySQL] 二进制文件

文章目录 日志文件binlog是什么简介产生方式文件格式statementrowmixed 怎么办设置文件存储格式缓冲区大小的调整方式缓冲区写入文件的时机 sync_binlog 日志文件 官网 https://dev.mysql.com/doc/refman/8.0/en/server-logs.html中文版 https://mysql.net.cn/doc/refman/8.0/e…

OpenCV | 霍夫变换:以车道线检测为例

霍夫变换 霍夫变换只能灰度图,彩色图会报错 lines cv2.HoughLinesP(edge_img,1,np.pi/180,15,minLineLength40,maxLineGap20) 参数1:要检测的图片矩阵参数2:距离r的精度,值越大,考虑越多的线参数3:距离…

快速安装方式安装开源OpenSIPS和CP控制界面

OpenSIPS是目前世界上主流的两个SIP软交换引擎(其中另外一个是kamailio)或者SIP信令服务器(个人认为是比较正确的称谓)。关于Opensips的基础和一些参数配置和安装方式笔者在很久以前的历史文档中有非常多的介绍。最近,很多用户使用OpenSIPS软…

《PySpark大数据分析实战》-18.什么是数据分析

📋 博主简介 💖 作者简介:大家好,我是wux_labs。😜 热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP…

EPROM 作为存储器的 8 位单片机

一、基本概述 TX-P01I83 是以 EPROM 作为存储器的 8 位单片机,专为多 IO 产品的应用而设计,例如遥控器、风扇/灯光控制或是 玩具周边等等。采用 CMOS 制程并同时提供客户低成本、高性能等显着优势。TX-P01I83 核心建立在 RISC 精简指 令集架构可以很容易…

【零基础入门Docker】什么是Dockerfile Syntax

✍面向读者:所有人 ✍所属专栏:零基础入门Docker专栏https://blog.csdn.net/arthas777/category_12455882.html 目录 编写Dockerfile和Format的语法 2. MAINTAINER 3. RUN 4. ADD 6. ENTRYPOINT 7. CMD 8. EXPOSE 9. VOLUME 11. USER 12. ARG …

Git指令集合

文章目录 1. 撤销暂存区内容2.修改commit comment3. 合并分支3.1 git rebase3.2 git merge 4.撤销前3次commit指令5. cherry pick git指令有很多,常用的也就是那么几个,今天回顾一下几个准常用,很重要的几个指令。 1. 撤销暂存区内容 当我把…

【iOS】UICollectionView

文章目录 前言一、实现简单九宫格布局二、UICollectionView中的常用方法和属性1.UICollectionViewFlowLayout相关属性2.UICollectionView相关属性 三、协议和代理方法:四、九宫格式的布局进行升级五、实现瀑布流布局实现思路实现原理代码调用顺序实现步骤实现效果 总…