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

news2025/2/24 23:22:59

使用 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.coloradmin.cn/o/1334430.html

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

相关文章

【数据结构】——期末复习题题库(1)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

使用双异步后,从 191s 优化到 2s

目录 一、一般我会这样做:操作起来,如果文件比较多,数据量都很大的时候,会非常慢。 二、谁写的?拖出去,斩了!优化1:先查询全部数据,缓存到map中,插入前再进行…

如何使用宝塔面板+Discuz+cpolar内网穿透工具搭建可远程访问论坛服务

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board(以下简称 Discuz!)是一套通用的社区论坛软件系统,用户可以在不需要任何编程的基础上&a…

怎么把C盘文件移到D盘?轻松操作的四种方法

在Windows系统中,C盘通常是系统盘,承载着系统文件和应用程序。但是,随着时间的推移,C盘可能会被占满空间,导致电脑运行缓慢或者出现错误。本文将介绍四种方法,帮助你轻松地将C盘中的文件移动到D盘&#xff…

ipv4静态路由与静态BFD联动示例

静态路由简介 定义 静态路由是一种需要管理员手工配置的特殊路由 目的 静态路由在不同网络环境中有不同的目的: 当网络结构比较简单时,只需配置静态路由就可以使网络正常工作。 在复杂网络环境中,配置静态路由可以改进网络的性能&#x…

充电桩如何选型MOS

• 充电桩是大功率 AC-DC 转换电源,用于给新能源电动汽车快速充电。 • 目前非 800V系统充电桩采用三相维也纳整流 LLC 电路,其中 PFC 整流可以采用二 极管,PFC 升压可以采用650V IGBT 或者 SJ MOSFET, LLC 采用 650V SJ MOSFET。…

设计模式(4)--对象行为(4)--迭代器

1. 意图 提供一种方法顺序访问一个聚合对象中的各个元素,而又不需暴露该对象的内部表示。 2. 四种角色 抽象集合(Aggregate)、具体集合(Concrete Aggregate)、抽象迭代器(Iterator)、具体迭代器(Concrete Iterator) 3. 优点 3.1 支持以不同的方式遍历一个聚合 3.2…

从PDF中提取图片

由于工作需要,要从pdf文件中提取出图片保存到本地,项目中就引用到了Apache PDFBox库。 1 什么是Apache PDFBox? Apache PDFBox库,一个用于处理PDF文档的开源Java工具。它允许用户创建全新的PDF文件,操作现有的PDF文档&#xff0…

Python 简易图形界面库easygui 对话框大全

easygui 安装 C:\> pip install easygui Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting easygui Using cached https://pypi.tuna.tsinghua.edu.cn/packages/8e/a7/b276ff776533b423710a285c8168b52551cb2ab0855443131fdc7fd8c16f/easygui-…

如何为你的网站启用HTTPS

步骤一:获取SSL/TLS证书 选择SSL证书提供商: 选择一家可信赖的SSL证书提供商。对于小型网站,JoySSL提供的免费证书是一个不错的选择。购买或申请证书: 根据你的网站需求,购买相应类型的SSL证书。证书的类型包括单域、…

电子电器架构刷写方案——General Flash Bootloader

电子电器架构刷写方案——General Flash Bootloader 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 注:文章1万字左右,深度思考者入!!! 老规矩,分享一段喜欢的文字,避免…

git命令和docker命令

1、git git是分布式的版本控制工具 git可以通过本地仓库管理文件的历史版本记录 # 本地仓库操作的命令 # 初始化本地库 git init # 添加文件到暂存区 git add . git checkout 暂存区要撤销的文件名称 # 提交暂存区文件 git commit -m 注释# 版本穿梭 # 查看提交记录 git log…

Web 开发技术

Web 开发技术 | MDN (mozilla.org)https://developer.mozilla.org/zh-CN/docs/Web 开放的 Web 为开发者提供了巨大的机遇,为了充分利用这些技术,你需要知道如何使用它们。在下方你可以找到相关 Web 技术的文档链接。 面向 Web 开发者的文档 Web 开…

.halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

尊敬的读者: 网络安全是当今数字时代的一大挑战,各种勒索病毒如.halo病毒层出不穷,对用户和企业的数据安全构成了严重威胁。本文将介绍.halo勒索病毒,以及如何恢复被其加密的数据文件,同时提供预防措施。在面对被勒索…

【MySQL基础】:超详细MySQL完整安装和配置教程

🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. MySQL数据库1.1 版本1.2 下载1.3 安装1.4 客户端连接 🌤️全篇总…

IDEA基本设置

本博客适用于纯新手小白,或者刚下载IDEA想要优化开发添加配置的读者。 基础设置 不区分大小写代码补全 打开 IntelliJ IDEA。转到 “File”(文件) > “Settings”(设置)(Windows/Linux)或 “…

众和策略证券开户首选:注册制是什么意思?

注册制是什么意思? 注册制是指证券监管安排对在二级商场上市发行的包括股票在内的各型有价证券实施事前审理和注册的准则。 具体流程为,当企业或其它金融安排计划通过证券商场向大众发行股票、债券等证券时,需求先向监管安排提交恳求&#…

【Linux】僵尸与孤儿 进程等待

目录 一,僵尸进程 1,僵尸进程 2,僵尸进程的危害 二,孤儿进程 1,孤儿进程 三,进程等待 1,进程等待的必要性 2,wait 方法 3,waitpid 方法 4,回收小结…

基于ssm个人日常事务管理系统论文

摘 要 进入21世纪网络和计算机得到了飞速发展,并和生活进行了紧密的结合。目前,网络的运行速度以达到了千兆,覆盖范围更是深入到生活中的角角落落。这就促使 管理系统的发展。管理系统可以实现远程处理事务,远程工作信息和随时追…

基于 Python 和Surprise库,新手轻松搭建推荐系统

解密基于用户的推荐系统。 1、简介 在数据时代,推荐系统是提升用户体验的重要工具。今天介绍如何使用亚马逊的电影评分数据集创建电影推荐系统。 2、数据加载与探索 首先,通过加载和探索数据集开启数据分析过程。首先导入Pandas和Numpy,这…