VSCode C/C++ 分目录+多文件编译配置2

news2024/11/19 9:41:30

前言:介绍 task.json 和 launch.json 文件

task.json 和 launch.json 是用于配置 VS Code 编辑器中的任务 和 调试功能的两个重要文件。

task.json 文件用于配置任务,它定义了执行特定操作的任务,并提供了相应的命令和参数。以下是 task.json 的一些常见配置属性:

“tasks”:包含了一个或多个任务配置,每个配置定义了一个特定的任务。
“label”:指定了任务的名称,用于在 VS Code 中显示。
“command”:指定了要执行的命令或可执行文件的路径。
“args”:指定了传递给命令或可执行文件的参数。
“options”:指定了任务运行时的选项,如工作目录、环境变量等。
“problemMatcher”:指定了问题匹配器,用于捕获任务输出中的错误和警告信息。
其他任务特定的属性,如 “isBackground”(指定任务是否在后台运行)等。
launch.json 文件用于配置调试器,它定义了调试会话的启动方式以及各种调试选项。以下是 launch.json 的一些常见配置属性:

“configurations”:包含了一个或多个调试配置,每个配置定义了一个特定的调试方案。
“type”:指定了要使用的调试器类型,如 C++、Python、Node.js 等。
“request”:指定了调试器的请求类型,例如 “launch”、“attach” 等。
“program”:指定了要调试的程序的入口点路径。
“args”:指定了传递给被调试程序的命令行参数。
“env”:指定了环境变量,用于设置调试过程中的环境。
其他调试器特定的属性,如 “preLaunchTask”(指定在调试之前执行的任务)、“sourceFileMap”(指定源代码与实际文件路径之间的映射关系)等。
总结起来,task.json 用于配置任务,以便在编辑器中执行自定义的操作。launch.json 用于配置调试器,以便在编辑器中进行程序调试。它们的作用是提供了一种简便的方式来定义和管理调试和任务相关的设置,使得开发者可以更高效地进行调试和任务操作。

1、项目结构(分目录+多文件形式)
在这里插入图片描述


${workspaceFolder} :表示当前workspace文件夹路径

${workspaceRootFolderName}:表示workspace的文件夹名

${file}:文件自身的绝对路径

${relativeFile}:文件在workspace中的路径

${fileBasenameNoExtension}:当前文件的文件名,不带后缀

${fileBasename}:当前文件的文件名

${fileDirname}:文件所在的文件夹路径

${fileExtname}:当前文件的后缀

${lineNumber}:当前文件光标所在的行号

${env:PATH}:系统中的环境变量

2、task.json文件
2.1 修改前

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "D:\\App\\Microsoft VS Code\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "调试器生成的任务。"
        },
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件 ver(1)",
            "command": "D:\\App\\Microsoft VS Code\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

2.2 修改后

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",  //需要确保 tasks.json 的 label 属性 与 launch.json 的 preLaunchTask 属性 完全相同
            "command": "D:\\App\\Microsoft VS Code\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",

                // "-g",
                // "${fileDirname}/*.cpp",
                "-g", //-g:生成调试信息,便于在编译后进行程序调试。
                "${workspaceFolder}/src/*.cpp",  // "${workspaceFolder}/src/*.cpp":指定了要编译的源代码文件的路径。${workspaceFolder} 表示项目根目录的路径,/src/*.cpp 表示在 src 目录下的所有 .cpp 文件。


				//增加
                "-I", //-I:指定了头文件搜索路径。
                "${workspaceFolder}/inc", // 表示头文件所在的目录路径。${workspaceFolder} 表示项目根目录的路径,/inc 表示在项目根目录下的 inc 目录。



                // "-o",
                // "${fileDirname}\\${fileBasenameNoExtension}.exe"
                "-o", //-o:指定输出文件的路径和名称。
                "${workspaceFolder}/out/${fileBasenameNoExtension}.exe" //表示输出文件的路径和名称。${workspaceFolder} 表示项目根目录的路径,/out/ 表示在项目根目录下的 out 目录,${fileBasenameNoExtension} 表示当前被编译的源代码文件的基本名称(不包括扩展名),.exe 表示生成的可执行文件的扩展名。
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

3、launch.json文件
3.1 修改前

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}", 
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\App\\Microsoft VS Code\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe 生成活动文件" 
        }
    ]
}

3.2 修改后

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++.exe - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",

            //"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            //修改为:
            "program": "${workspaceFolder}\\out\\${fileBasenameNoExtension}.exe", //这里

            "args": [],
            "stopAtEntry": false,

            //"cwd": "${fileDirname}", //"cwd" 是表示工作目录(current working directory)的缩写。"cwd": "${fileDirname}" 表示将当前文件所在的目录作为工作目录。
            //修改为:
            "cwd": "${workspaceFolder}\\out", //"cwd": "${workspaceFolder}\out" 表示将工作目录设置为当前工作区的根目录下的 "out" 文件夹

            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\App\\Microsoft VS Code\\mingw64\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe 生成活动文件" //tasks.json --> label == launch.json --> preLaunchTask
        }
    ]
}

4、实现示例
VSCode C/C++ 分目录+多文件编译配置2

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

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

相关文章

BERT理解

参数计算(沐神对于bert参数计算介绍)

【趣味随笔】移动机器人基础(导航方式、自主导航、硬件系统结构分布)

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

动画制作软件 Animate 2024 mac中文版介绍说明(an2024) v24.0

Animate 2024 mac是一款动画制作软件,它能帮助用户轻松制作出各种精美的动画作品。 Animate 2024拥有强大而直观的设计工作流程,能够让用户自由地构建动画场景、绘制精美的图形,并轻松添加动态效果。无论是传统手绘风格还是骨骼动画&#xff…

电路综合原理与实践---单双端口理想微带线(伪)手算S参数与时域波形

电路综合原理与实践—单双端口理想微带线(伪)手算S参数与时域波形与时域波形 1、单理想微带线(UE)的S参数理论推导 参考:Design of Ultra Wideband Power Transfer Networks的第四章,之后总结推导过程 2…

华为eNSP配置专题-RIP路由协议的配置

文章目录 华为eNSP配置专题-RIP路由协议的配置0、概要介绍1、前置环境1.1、宿主机1.2、eNSP模拟器 2、基本环境搭建2.1、终端构成和连接2.2、终端的基本配置 3、RIP路由的配置3.1、RIP路由的配置3.2、RIP路由的删除 华为eNSP配置专题-RIP路由协议的配置 0、概要介绍 路由信息…

2023年淘宝双十一预售红包入口介绍

2023年淘宝双十一预售红包入口介绍 近两年,淘宝双十一推出了预售玩法会场。在会场中,大家可以做预售任务,领取现金红包,让购物变得更省。那么,2023年淘宝双十一预售红包入口在哪里?下面小编就给大家介绍下&#xff0c…

SSM框架集成

文章目录 SSM1 介绍2 集成步骤目录结构配置 web.xml配置 jdbc.properties配置 SqlMapConfig.xml配置 applicationContext-dao.xml配置 applicationContext-service.xml配置 log4j.properties编写解决中文乱码的过滤器编写实体类编写 ItemsMapper 接口编写映射 ItemsMapper.xml编…

Power BI实现实时动态和用户输入的数据交互

背景:Power BI一般作为一个展示和分析数据的平台存在,即使是我们用Direct Query的mode也是受制于连接的数据库的表刷新,不能实现实时动态数据变化展示。 解决思路:当Power Apps里面输入了新的数据时,数据会写入到data…

[SWPUCTF 2023 秋季新生赛]——Web方向 详细Writeup

Web colorful_snake 来玩贪吃蛇~ F12查看源代码&#xff0c;可以看到this_is_real_flag函数&#xff0c;发现是unicode编码 利用网站转换得到flag 一键连接! 连连need <?php highlight_file(__FILE__); error_reporting(0); $md5_1 $_GET[md5_1]; $md5_2 $_GET[md5_2]; …

python实现客户成套订单配送策略混合遗传算法编码

以如下的论文文献为学习对象&#xff1a;2008年发表在《控制工程》的文献《客户成套订单配送策略混合遗传算法研究》 文献研究的学术意义 本文研究的目的是寻求在车队车辆数有限情况下 &#xff0c;如何合理安排每天的车辆 &#xff0c;使得总成本最小的方案。另外&#xff0…

Qt使用QListWidget实现自定义Item效果

Q&#xff1a;如何在Qt库的基础上&#xff0c;实现自定义控件呢&#xff1f; A&#xff1a;根据官方文档回答&#xff0c;就是继承需实现的控件&#xff0c;然后实现自定义功能。 以下是实现QListWidget控件的自定义item。 先看下最终效果是如何&#xff1a; listItem 主界面U…

sql高级教程-索引

文章目录 架构简介1.连接层2.服务层3.引擎层4.存储层 索引优化背景目的劣势分类基本语法索引结构和适用场景 性能分析MySq| Query Optimizerexplain 索引优化单表优化两表优化三表优化 索引失效原因 架构简介 1.连接层 最上层是一些客户端和连接服务&#xff0c;包含本地sock通…

shell的for循环与结构化

shell笔记 列表for循环不带列表for循环for循环举例1.例1 所有文件名大写替换为小写2. 例2 读取/etc/passwd文件&#xff0c;依次输出ip段3. 例3 读取/etc/hosts内容for循环&#xff0c;执行ping4. 例4 循环ip列表&#xff0c;输出对应编号5. 例5 批量添加用户 break1. 例1 brea…

python:遗传算法(Genetic Algorithm,GA)求解23个测试函数

一、遗传算法 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;起源于对生物系统所进行的计算机模拟研究&#xff0c;是一种随机全局搜索优化方法&#xff0c;它模拟了自然选择和遗传中发生的复制、交叉(crossover)和变异(mutation)等现象&#xff0c;从任一…

css之Flex弹性布局

文章目录 &#x1f415;前言&#xff1a;&#x1f3e8;定义flex容器 display:flex&#x1f3e8;在flex容器中子组件进行排列&#x1fa82;行排列 flex-direction: row&#x1fa82;将行排列进行翻转排列 flex-direction: row-reverse&#x1f3c5;按列排列 flex-direction: col…

统计二进制中1的个数

写一个函数返回参数二进制中 1 的个数。 比如&#xff1a; 15 0000 1111 4 个 1 我们先引入一个容易理解的例子&#xff0c;怎么得到一个十进制的数各个位置上的数为多少&#xff1f; 这里我们以一个十进制的三位数 123为例&#xff0c;要想得到它的个位&#xff0c;十位&#…

kubernetes-Service

文章目录 1、前言2、基本语法2.1 Service yaml2.2 关键字段2.3 port、nodePort、targetPort、containerPort字段说明 3、Service 类型3.1 ClusterIP3.2 NodePort3.3 LoadBalancer3.4 ExternalName 4、无头服务&#xff08;Headless Services&#xff09;5、访问service参考 1、…

R文件详细介绍、瘦身方案和原理

文章目录 1. 背景2. R文件介绍2.1 R文件概念2.1.1 标识符是怎么与资源联系起来的&#xff1f; 2.2 R文件内容2.3 library module和aar的R文件内容生成规则2.4 是谁生成的R文件&#xff1f;2.5 打包之后的R文件2.6 R文件为啥大&#xff1f;这么多&#xff1f; 3. 为什么R文件可以…

RK356x U-Boot研究所(开发篇)5.1 启动SATA硬盘中的固件

平台U-Boot 版本Linux SDK 版本RK356x2017.09v1.2.3RK356x支持从SATA硬盘中启动固件,只要板卡中有预留这个接口即可。值得注意的是,这个固件不能从maskrom阶段就直接进行加载,需要从别的媒介启动(Flash、eMMC或者TF卡)后跑到U-Boot阶段,在这个U-Boot阶段再去加载SATA硬盘…

黑豹程序员-架构师学习路线图-百科:Java的第二春Spring框架

文章目录 1、 Spring的发展历史2、为什么Spring能霸屏&#xff1f;2.1、容器的设计2.2、通过四个策略2.3、三种方式 3、学习编程设计的典范 1、 Spring的发展历史 正当SUN公司的EJB在全球开始热炒时&#xff0c;正当程序员纷纷转型EJB开发时&#xff0c;正当程序员为跑通EJB程…