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的值了。
}



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

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

相关文章

爬虫工作量由小到大的思维转变---<第二十三章 Scrapy开始很快,越来越慢(医病篇)>

诊断篇https://blog.csdn.net/m0_56758840/article/details/135170994?ops_request_misc%257B%2522request%255Fid%2522%253A%2522170333243316800180644102%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id1703332433168001806441…

JavaOOP篇----第十四篇

系列文章目录 文章目录 系列文章目录前言一、Hashcode的作用二、Java的四种引用,强弱软虚三、Java创建对象有几种方式?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码…

mac m1芯片 pytorch安装及gpu性能测试

pytorch 使用mac的m1芯片进行模型训练。 #小结:在数据量小和模型参数少,batch_size小时,cpu训练更快(原因:每次训练时数据需要放入GPU中,由于batch_size小。数据放入gpu比模型计算时间还长&#xff09…

SpringIOC之AbstractMessageSource

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

K8S 外部访问配置、 Ingress、NodePort

将K8S部署应用提供给外部访问一般有三种方式: NodePort 暴露端口到节点,提供了集群外部访问的入口LoadBalancer 需要负载均衡器(通常都需要云服务商提供,裸机可以安装 METALLB 测试)Ingress 统一管理 svc的外部访…

Bloom过滤器

Bloom过滤器 一、概述二、原理三、优缺点1. 优点2.缺点 四、Bloom过滤器在比特币中的应用五、项目应用步骤1. pom.xml引入依赖2. 样例代码 六、Java版简易实现 一、概述 Bloom过滤器是一个允许用户描述特定的关键词组合而不必精确表述的基于概率的过滤方法。它能让用户在有效搜…

详解Vue3中的内置组件(transition)

本文主要介绍Vue3中的内置组件(transition)的普通写法和setup写法。 目录 一、在普通写法中使用内置组件(transition)二、在setup写法中使用内置组件(transition)三、使用注意项 在Vue3中,内置了…

Linux poll 和 select 机制

poll select 介绍 使用非阻塞 I/O 的应用程序常常使用 poll, select, 和 epoll 系统调用. poll, select 和 epoll 本质上有相同的功能: 每个允许一个进程来决定它是否可读或者写一个 或多个文件而不阻塞. 这些调用也可阻塞进程直到任何一个给定集合的文件描述符可用来 读或写.…

Nessus详细安装-windows (保姆级教程)

Nessus描述 Nessus 是一款广泛使用的网络漏洞扫描工具。它由 Tenable Network Security 公司开发,旨在帮助组织评估其计算机系统和网络的安全性。 Nessus 可以执行自动化的漏洞扫描,通过扫描目标系统、识别和评估可能存在的安全漏洞和弱点。它可以检测…

使用 Spring Boot + MyBatis开发需要注意的事项以及开发模版

前言: 注意,本篇不适用于有相关开发经验的开发者,作为一个在职开发者,我经常在完成从0-1的模块,也就是从数据库表开始到创建实体类,以及dao层,Service层等业务需要添加相关注解,这样…

使用office打开word文档时候提示错误:0x426-0x0的解决方案

在使用office打开word文档时候提示错误:0x426-0x0。如下图: 昨天还用的好好的,怎么今天就不行了?为什么呢? 更多工作中遇到问题见:凯哥BK 这个错误导致office无法启动通常是由于office软件所依赖的服务无…

vue的表单收集案例

Vue的表单收集案例 这只是最基础的表单收集&#xff0c;并未涉及到element-ui。 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>收集表单数据</title><script type"text/javascript" src"../js…

Hago 的 Spark on ACK 实践

作者&#xff1a;华相 Hago 于 2018 年 4 月上线&#xff0c;是欢聚集团旗下的一款多人互动社交明星产品。Hago 融合优质的匹配能力和多样化的垂类场景&#xff0c;提供互动游戏、多人语音、视频直播、 3D 虚拟形象互动等多种社交玩法&#xff0c;致力于为用户打造高效、多样、…

物理模拟重力 斜抛运动计算 抛物线计算

物理模拟重力 斜抛运动计算 抛物线计算 一、介绍二、原理三、实现如下PhysicsUtil.cs 工具类Missile.cs 四、资源分享 一、介绍 模拟Unity原始重力系统进行重写&#xff0c;可是实现发射到指定目标位置并能继续当前力进行自身的弹力与摩擦继续运动 二、原理 将Unity原始不受控…

word2003 open word2007+

Win 7 C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates 还是不行&#xff0c;重装office2003吧&#xff0c;再安装转换插件&#xff0c;但是再高版本好像没转换工具

【Linux】进程管理

ps&#xff1a;报告当前进程快照。top&#xff1a;显示任务。kill&#xff1a;给一个进程发送信号。shutdown&#xff1a;关机或重启系统。 一个程序可以发动另一个程序被表述为一个父进程可以产生一个子进程&#xff0c;内核维护每个进程的信息&#xff0c;以此来保持事情有序…

【新版】软考 - 系统架构设计师(总结笔记)

个人总结学习笔记&#xff0c;仅供参考&#xff01;&#xff01;&#xff01;! →点击 笔者主页&#xff0c;欢迎关注哦&#xff08;互相学习&#xff0c;共同成长&#xff09; 笔记目录 &#x1f4e2;【系统架构设计系列】系统架构设计专业技能 计算机组成与结构操作系统信…

如何快速实现地源热泵远程监控

地源热泵远程监控解决方案 一、项目背景 山东省潍坊市盛世花园小区地源热泵项目是一个先进的供暖与制冷系统&#xff0c;旨在为整个小区提供高效且节能的温控服务。该系统主要由地下管道网络、地源热泵单元以及室内分配系统组成。 针对现有的地源热泵系统的管理和监控问题&a…

1162字符串逆序

一&#xff1a;题目 二.思路分析 1.如果不用递归&#xff0c;可以输入字符串后&#xff0c;再逆序输出&#xff0c;但是题目要求使用递归 2.使用递归&#xff1a; 2.1输入字符&#xff0c;直到输入的字符是‘&#xff01;’&#xff0c;停止输入&#xff0c;否则继续输入&…

Redis数据一致解决方案

文章目录 前言技术积累查询缓存业务流程更新缓存业务流程 更新缓存问题解决方案写在最后 前言 当前的应用服务很多都有着高并发的业务场景&#xff0c;对于高并发的解决方案一般会用到缓存来降低数据库压力&#xff0c;并且还能够提高系统性能减少请求耗时&#xff0c;比如我们…