基于vscode的cppcmake调试环境配置

1. 创建项目文件

  1. 创建cpp文件及CMakeLists.txt文件
  • helloOpenCV.cpp
#include <opencv2/opencv.hpp>
int main() {// 创建图像,初始化为黑色cv::Mat image = cv::Mat::zeros(200, 300, CV_8UC3);// 设置为纯绿色 (BGR格式:0, 255, 0)image.setTo(cv::Scalar(0, 255, 0));// 显示图像cv::imshow("Green Image", image);// 等待按键cv::waitKey(0);// 销毁所有窗口cv::destroyAllWindows();return 0;
}
  • CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(helloOpenCV)
set(CMAKE_BUILD_TYPE "Debug")
find_package(OpenCV REQUIRED)
add_executable(helloOpenCV helloOpenCV.cpp)
target_link_libraries(helloOpenCV ${OpenCV_LIBS})

若编译过程提示缺少opencv库则执行 sudo apt install libopencv-dev

2. 生成可执行文件

# 在项目根目录下创建build文件夹
mkdir build
cd build
# 生成构建文件makefile
cmake ..
# 基于makefile构建项目生成可执行文件 helloOpencv
make
# 调用可执行程序 弹出图像
./helloOpenCV

3. vscode 调试环境配置

vscode调试环境主要包括三个文件的配置

  1. c_cpp_properties.json负责指定编译器及头文件路径
  2. tasks.json负责编译生成可执行文件
  3. launch.json负责可执行文件的调试
c_cpp_properties.json

快捷键 ctrl+shift+P 后选择 c/c++ : edit configurations(JSON)生成c_cpp_properties.json
在这里插入图片描述

{"configurations": [{"name": "Linux",    "includePath": ["${workspaceFolder}/**"],"defines": [],"compilerPath": "/usr/bin/clang","cStandard": "c17","cppStandard": "c++14","intelliSenseMode": "linux-clang-x64"}],"version": 4
}

其中较重要的字段包括:

  • includePath:头文件搜索路径
  • compilerPath:指定C/C++编译器的路径
  • cppStandard:C++标准
  • intelliSenseMode:智能补全模式
tasks.json

在这里插入图片描述
点击Terminal-Configure Default Build Task 在上述CMake: ***中任意选择一项生成tasks.json即可
在这里插入图片描述

  • 方式1,通过自定义子task的顺序完成构建过程
{"version": "2.0.0","tasks": [{"label": "cmake","type": "shell","command": "cmake","args": ["../"],"options": {"cwd": "${workspaceFolder}/build"},            },{"label": "make","type": "shell","command": "make","args": [],"options": {"cwd": "${workspaceFolder}/build"}, },{"label": "cmake task","dependsOn":["cmake", "make"],"dependsOrder": "sequence"},],
}
  • 方式2,通过调用shell脚本的形式完成构建过程(我更倾向的一种方式,定义更简单)
{"version": "2.0.0","tasks": [{"label": "cmake task","type": "shell","command": "bash","args": ["${workspaceFolder}/build.sh"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "Task generated by Debugger."}]
}

其中build.sh内容为

cd build
cmake ..
make
launch.json

在这里插入图片描述

点击Add configuration
在这里插入图片描述

将program改为要拉起的可执行程序,将prelaunchask设置为tasks.json中的label

{"version": "0.2.0","configurations": [{"name": "(gdb) Launch","type": "cppdbg","request": "launch","program": "${workspaceFolder}/build/helloOpenCV","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"preLaunchTask": "cmake task"}]
}

其中较重要的字段包括

  • name:自定义命名运行与调式的名称,将在左侧运行和调试的菜单中显示名称
  • type:调试器类型,C/C++的调试类型为cppdbg
  • program:可执行文件路径
  • environment:添加到程序的环境变量
  • preLaunchTask:运行和调式前要启动的tasks任务,也即要启动的编译任务,任务名要和tasks.json里面的"label"值对应一致

参考

c_cpp_properties.json字段参考
launch.json字段参考
综述详细版

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

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

相关文章

后端面试题分享第一弹(状态码、进程线程、TCPUDP)

后端面试题分享第一弹 1. 如何查看状态码&#xff0c;状态码含义 在Web开发和调试过程中&#xff0c;HTTP状态码是了解请求处理情况的重要工具。 查看状态码的步骤 打开开发者工具&#xff1a; 在大多数浏览器中&#xff0c;您可以通过按下 F12 键或右键单击页面并选择“检查…

(1)STM32 USB设备开发-基础知识

开篇感谢&#xff1a; 【经验分享】STM32 USB相关知识扫盲 - STM32团队 ST意法半导体中文论坛 单片机学习记录_桃成蹊2.0的博客-CSDN博客 USB_不吃鱼的猫丿的博客-CSDN博客 1、USB鼠标_哔哩哔哩_bilibili usb_冰糖葫的博客-CSDN博客 USB_lqonlylove的博客-CSDN博客 USB …

win32汇编环境,对话框程序中使用进度条控件

;运行效果 ;win32汇编环境,对话框程序中使用进度条控件 ;进度条控件主要涉及的是长度单位,每步步长,推进的时间。 ;比如你的长度是1000,步长是100,每秒走1次,则10秒走完全程 ;比如你的长度是1000,步长是10,每秒走1次,则100秒走完全程,但每格格子的长度与上面一样 ;以下…

CrypTen——基于pytorch的隐私保护机器学习框架

目录 一、CrypTen概述 二、应用场景 三、CrypTen优势 四、CrypTen技术解析 1.基于pytorch的构建基础 2.核心密码学原语 3.加密模型训练流程 五、传统隐私保护技术与CrypTen的对比 1.传统隐私保护技术介绍 2.CrypTen与传统隐私保护技术的区别 六、CrypTen的环境配置…

电梯系统的UML文档11

场景 7.3 紧急制动 3 –当电梯停止在某一楼层时&#xff0c;如果命令门打开&#xff0c;但是门不开&#xff0c;则紧急制动将触发。 图 16: 场景 7.3- 紧急制动 - 门将不开启当电梯停止在目的层 场景 7.4 紧急制动 4 –如果电梯移动时门打开&#xff0c;紧急制动将触发。 图 1…

【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置(单机)

Elasticsearch系列文章目录 【Elasticsearch 基础入门】一文带你了解Elasticsearch&#xff01;&#xff01;&#xff01;【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置&#xff08;单机&#xff09; 目录 Elasticsearch系列文章目录前言单机模式1. 安装 J…

正点原子Linux 移植USB Wifi模块MT7601U驱动(上)

目录 下载驱动MT7601驱动文件中重要的几个文件1.README_STA_usb2.sta_ate_iwpriv_usage.txt3.config.mk4.Makefile 移植过程编译驱动成ko文件复制到根文件系统里驱动加载失败常见原因A. DMA缓存大小不够B. RT2870STA.dat文件没配置好 模块加载测试开启无线网卡并设置IP地址 参考…

Linux相关概念和易错知识点(26)(命名管道、共享内存)

目录 1.命名管道 &#xff08;1&#xff09;匿名管道 -> 命名管道 ①匿名管道 ②命名管道 &#xff08;2&#xff09;命名管道的使用 ①创建和删除命名管道文件 ②命名管道文件的特性 ③命名管道和匿名管道的区别 &#xff08;3&#xff09;用命名管道实现进程间通信…

【时时三省】(C语言基础)对比一组函数

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 对比一组函数 比如对比一下scanf fscanf sscanf和printf fprintf sprintf scanf 针对标准输入的格式化的输入语句 其实它针对的是stdin fscanf 针对所有输入流的格式化的输入语句 它是针对s…

Leecode刷题C语言之组合总和②

执行结果:通过 执行用时和内存消耗如下&#xff1a; int** ans; int* ansColumnSizes; int ansSize;int* sequence; int sequenceSize;int** freq; int freqSize;void dfs(int pos, int rest) {if (rest 0) {int* tmp malloc(sizeof(int) * sequenceSize);memcpy(tmp, seque…

汽车网络信息安全-ISO/SAE 21434解析(下)

目录 第十二~十四章 - 后开发阶段 1. 十二章节 - 生产 2. 十三章节 - 运营与维护 网络安全事件响应 更新 3. 十四章节 - 结束网络安全支持和停用 结束网络安全支持 报废 第十五章 - TARA分析方法 1. 概述 2. 资产识别 3. 威胁场景识别 4. 影响评级 5. 攻击路径分…

[java] java基础-字符串篇

目录 API String 创建字符串对象的两种方式&#xff1a; Java的内存模型 字符串常量池&#xff08;串池&#xff09;存放地址 两种构造方法的内存分析 String的常用方法 号比较的是什么 字符串比较&#xff08;比较字符串的数据值&#xff09; 遍历字符串 StringBui…

Unity中关于实现 管道水流+瀑布流动+大肠蠕动效果笔记

Unity中关于实现 管道水流瀑布流动大肠蠕动效果笔记 效果展示&#xff1a; 参考资料及链接&#xff1a; 1、如何在 Unity 中创建水效果 - 水弯曲教程 https://www.youtube.com/watch?v3CcWus6d_B8 关于补充个人技能中&#xff1a;顶点噪波影响网格着色器配合粒子实现水特效 …

Couchbase UI: Indexes

在Couchbase中&#xff0c;索引的这些指标可以帮助你评估索引的性能和状态。下面是每个指标的详细解释&#xff0c;以及如何判断索引的有效性&#xff1a; 1. Index Name&#xff08;索引名称&#xff09; 描述&#xff1a;每个索引都有一个唯一的名称。这个名称通常会包括表…

redis的分片集群模式

redis的分片集群模式 1 主从哨兵集群的问题和分片集群特点 主从哨兵集群可应对高并发写和高可用性&#xff0c;但是还有2个问题没有解决&#xff1a; &#xff08;1&#xff09;海量数据存储 &#xff08;2&#xff09;高并发写的问题 使用分片集群可解决&#xff0c;分片集群…

第一届“启航杯”网络安全挑战赛WP

misc PvzHE 去这个文件夹 有一张图片 QHCTF{300cef31-68d9-4b72-b49d-a7802da481a5} QHCTF For Year 2025 攻防世界有一样的 080714212829302316092230 对应Q 以此类推 QHCTF{FUN} 请找出拍摄地所在位置 柳城 顺丰 forensics win01 这个软件 云沙盒分析一下 md5 ad4…

ThreadLocal概述、解决SimpleDateFormat出现的异常、内存泄漏、弱引用、remove方法

①. ThreadLocal简介 ①. ThreadLocal是什么 ①. ThreadLocal本地线程变量,线程自带的变量副本(实现了每一个线程副本都有一个专属的本地变量,主要解决的就是让每一个线程绑定自己的值,自己用自己的,不跟别人争抢。通过使用get()和set()方法,获取默认值或将其值更改为当前线程…

蓝桥杯模拟算法:多项式输出

P1067 [NOIP2009 普及组] 多项式输出 - 洛谷 | 计算机科学教育新生态 这道题是一道模拟题&#xff0c;我们需要分情况讨论&#xff0c;我们需要做一下分类讨论 #include <iostream> #include <cstdlib> using namespace std;int main() {int n;cin >> n;for…

LLM - 大模型 ScallingLaws 的设计 100B 预训练方案(PLM) 教程(5)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/145356022 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Scalin…

深度解析:基于Vue 3的教育管理系统架构设计与优化实践

一、项目架构分析 1. 技术栈全景 项目采用 Vue 3 TypeScript Tailwind CSS 技术组合&#xff0c;体现了现代前端开发的三大趋势&#xff1a; 响应式编程&#xff1a;通过Vue 3的Composition API实现细粒度响应 类型安全&#xff1a;约60%的组件采用TypeScript编写 原子化…