2、vscode c++ 项目配置调试及运行

文章目录

  • 1、项目布局
  • 2、多项目管理
    • 2.1 先是一个总的CMakeLists.txt
    • 2.2 每个项目
    • 2.3 多版本OPENCV
  • 3、调试和运行

接上一篇文章,vscode和cmake的c++环境配置好以后,我们要写项目,再写对应的CMakeLists.txt

1、项目布局

.
├── bin
├── build
├── CMakeLists.txt
├── pp
├── pp_onnx

详细的如下:

.
├── bin
│   ├── pp
│   └── pp_onnx
├── build
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   │   ├── 3.21.0
│   │   ├── cmake.check_cache
│   │   ├── CMakeDirectoryInformation.cmake
│   │   ├── CMakeOutput.log
│   │   ├── CMakeTmp
│   │   ├── Makefile2
│   │   ├── Makefile.cmake
│   │   ├── progress.marks
│   │   └── TargetDirectories.txt
│   ├── cmake_install.cmake
│   ├── compile_commands.json
│   ├── Makefile
│   ├── pp
│   │   ├── CMakeFiles
│   │   ├── cmake_install.cmake
│   │   └── Makefile
│   └── pp_onnx
│       ├── CMakeFiles
│       ├── cmake_install.cmake
│       └── Makefile
├── CMakeLists.txt
├── pp
│   ├── CMakeLists.txt
│   └── src
│       ├── main.cpp
│       ├── video.cpp
│       └── video.h
├── pp_onnx├── CMakeLists.txt├── lib│   ├── onnxruntime-linux-x64-1.10.0│   └── onnxruntime-linux-x64-gpu-1.10.0└── src├── main.cpp└── img.cpp

2、多项目管理

这里cmake管理了两个项目,有了这个经验,向下变成一个项目或向上变成更多项目也是没问题的。这里是两个项目,pp 和pp_onnx,pp负责读视频,图片前后后理,pp_onnx负责图片推理并返回结果.

2.1 先是一个总的CMakeLists.txt

cmake_minimum_required(VERSION 3.5.0)
project(pinpang VERSION 0.1.0)
#c++ std 17 
set(CMAKE_CXX_STANDARD 17) 
message(STATUS "src path " ${CMAKE_SOURCE_DIR})
message(STATUS "binary path " ${CMAKE_BINARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY  ${CMAKE_SOURCE_DIR}/bin)message(STATUS "build pp ")
add_subdirectory(pp)set(BUILD_PP_ONNX true)
if (BUILD_PP_ONNX)
message(STATUS "build pp_onnx")
add_subdirectory(pp_onnx)
endif()

内容可以看到,可以通过设置参数来选择是否编译,
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) 这一句设置最终的可执行文件保存位置,
这种设置会把下边管的所有项目的可执行文件都放到这个路径下。

2.2 每个项目

每个项目要有自己的单独的CMakeLists.txt src文件文源文件(.c .cpp .h等),要用到第三方库,还要来个lib.比如pp_onnx
下面是,pp CMakeLIsts.txt内容:

# project(pp)
set(CMAKE_CXX_STANDARD 17)
#find required opencv
set(OpenCV_DIR /home/tl/opencv/build/) 
find_package(OpenCV REQUIRED)
message(STATUS "    pp use OpenCV version  is " ${OpenCV_VERSION})
#find_package(OpenCV REQUIRED)
aux_source_directory(src/ SRC_LIST) #找src下边所有的源文件
add_executable(pp  ${SRC_LIST})
#directory of opencv librarys
include_directories(${Opencv_INCLUDE_DIRS})
#opencv librarys
target_link_libraries(pp ${OpenCV_LIBS})
target_link_libraries(pp stdc++fs)
# SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/pp/bin") #可以单独指定
# message(STATUS "beginafdsfasfd src path " ${OpenCV_LIBS})
# set_target_properties(pp PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/pp/bin")

没啥,直接上里边的注释吧
pp_onnx的内容:

# project(pp_onnx)
set(CMAKE_CXX_STANDARD 17)
#find required opencv
set(OpenCV_DIR /home/tl/opencv/build/) # this can change which opencv you use
find_package(OpenCV REQUIRED)
message(STATUS "    pp_onnx use OpenCV version  is " ${OpenCV_VERSION})
#onnxruntime cpu or gpu
set(GPU_PP_ONNX true)
if (GPU_PP_ONNX)
message(STATUS "    pp_onnx use gpu.")
set(ONNXRUNTIME_ROOT_PATH ${CMAKE_SOURCE_DIR}/pp_onnx/lib/onnxruntime-linux-x64-gpu-1.10.0)
else()
message(STATUS "    pp_onnx use cpu")
set(ONNXRUNTIME_ROOT_PATH ${CMAKE_SOURCE_DIR}/pp_onnx/lib/onnxruntime-linux-x64-1.10.0)
endif()
set(ONNXRUNTIME_INCLUDE_DIRS ${ONNXRUNTIME_ROOT_PATH}/include/)
set(ONNXRUNTIME_LIB ${ONNXRUNTIME_ROOT_PATH}/lib/libonnxruntime.so)
#set(ONNXRUNTIME_LIB ${ONNXRUNTIME_ROOT_PATH}/lib/)aux_source_directory(src/ SRC_LIST)add_executable(pp_onnx  ${SRC_LIST})
#directory of opencv librarys
include_directories(${Opencv_INCLUDE_DIRS})
#opencv librarys
target_link_libraries(pp_onnx ${OpenCV_LIBS})include_directories(${ONNXRUNTIME_INCLUDE_DIRS})
target_link_libraries(pp_onnx ${ONNXRUNTIME_LIB})
# SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/pp_onnx/bin")
# set_target_properties(pp_onnx PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/pp_onnx/bin")

这个里边多了一个是否使用gpu onnxruntim,这个要看具体的运行环境,来手动设定,当然,main.cpp中也要有对应的配置。

2.3 多版本OPENCV

安装opencv可以多个版本,从源码安装,可以找找我的博客https://blog.csdn.net/u011119817/article/details/100125018。
对于这种,这装时,cmake 配置 -DCMAKE_INSTALL_PREFIX=/path/yourpath,对应的cmake 改一行就行:set(OpenCV_DIR /path/yourpath) ,就行,也就是说这个项目就可以使用你安装的opencv

3、调试和运行

ctrl+shift+p,输入cmake 在这里插入图片描述
点击快速入门或生成,就可以自动完成项目配置。

在vscode最下方会生成:
在这里插入图片描述
点击 板手图标,会自动显示所有系统自带和自己安装的编译器:
在这里插入图片描述
这里有我自己安装的高版本gcc12.3,鼠标点击进行选择。
接着点击生成,生成齿轮和后边中括号里的是一套,可以选择,弹出的选项如图:
在这里插入图片描述
这时,会弹出要生成那个项目,如下图:
在这里插入图片描述
对于调试小虫子和三角形运行标志,这两后边的中括号,也是选择项目的:
在这里插入图片描述

关于调试和运行,我们都使用这里的小虫子和三角,不用vscode自带的,效果是一样的,而且这样不用写配置文件。
点击调试,会在.vscode文件夹中生成setting.json.内容是:

{"cmake.debugConfig": {"args":["jsonfile=/home/tl/ping_pong_referee/pypinpang/data/test/pp_label.json","mode=match", "videofile=/home/tl/ping_pong_referee/pypinpang/data/test/192.168.1.13_20230728161749_CH01_round1_240_320.avi", "outdir=json_result","trajdir=trajectory_result","--log_level","debug"]//"args":["jsonfile=/home/tl/ping_pong_referee/pypinpang/data/test/pp_label.json","mode=match", "videofile=/home/tl/ping_pong_referee/pypinpang/data/test/192.168.1.13_20230728161749_CH01_round1_240_320.avi", "outdir=json_result","trajdir=trajectory_result","--log_level","debug","-dv"]//"args":["jsonfile=/home/tl/ping_pong_referee/pypinpang/data/test1/pp_label.json","mode=match", "videofile=/home/tl/ping_pong_referee/pypinpang/data/test1/40_2_20230523233534_CH01_729_829.avi", "outdir=json_result","trajdir=trajectory_result","--log_level","debug","-dv"]//"args:":["/home/tl/ping_pong_referee/pypinpang/onnx_models/pp_v3_20230620.onnx","0.5","0.5","yellow_testimg.jpg"]},"files.associations": {"array": "cpp","atomic": "cpp","bit": "cpp","*.tcc": "cpp","cctype": "cpp","chrono": "cpp","clocale": "cpp","cmath": "cpp","codecvt": "cpp","complex": "cpp","condition_variable": "cpp","cstdarg": "cpp","cstddef": "cpp","cstdint": "cpp","cstdio": "cpp","cstdlib": "cpp","cstring": "cpp","ctime": "cpp","cwchar": "cpp","cwctype": "cpp","deque": "cpp","forward_list": "cpp","list": "cpp","map": "cpp","set": "cpp","unordered_map": "cpp","vector": "cpp","exception": "cpp","algorithm": "cpp","functional": "cpp","iterator": "cpp","memory": "cpp","memory_resource": "cpp","numeric": "cpp","optional": "cpp","random": "cpp","ratio": "cpp","string": "cpp","string_view": "cpp","system_error": "cpp","tuple": "cpp","type_traits": "cpp","utility": "cpp","fstream": "cpp","initializer_list": "cpp","iomanip": "cpp","iosfwd": "cpp","iostream": "cpp","istream": "cpp","limits": "cpp","mutex": "cpp","new": "cpp","ostream": "cpp","sstream": "cpp","stdexcept": "cpp","streambuf": "cpp","thread": "cpp","cinttypes": "cpp","typeinfo": "cpp","valarray": "cpp","filesystem": "cpp","bitset": "cpp","compare": "cpp","concepts": "cpp","unordered_set": "cpp","numbers": "cpp","semaphore": "cpp","stop_token": "cpp","typeindex": "cpp","*.ipp": "cpp"},"cmake.sourceDirectory": "/home/tl/ping_pong_referee"
}

cmake.debugConfig 里边是配置程序运行的参数,如果没有参数,那就直接执行了。
“cmake.sourceDirectory” 这个就是项目的根目录。调试,如果main.cpp有断点会停止。
在这里插入图片描述
调试时务必要把cmake:后改成debug,运行则无所谓,都可以。点击有四个选项,我只用前两个。
在这里插入图片描述

最终的调试为:
在这里插入图片描述

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

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

相关文章

jmeter实现webservice接口测试

其实可以用jmeter两种sampler进行webservice的测试: 1、SOAP/XML-RPC Request(但是在jmeter3.2以后版本中已经取消了这个取样器) 2、HTTP请求 下面分别介绍两种方式 一、首先需要使用soupUI工具抓取webservice接口的部分需要的信息。 1、新建项目 2、新建成功的…

怎么修改linux的root@后面的名称

文章目录 场景.登录服务器,root后面的名称是随机的,想自定义名称建议,直接使用命令执行需要重启机子 场景.登录服务器,root后面的名称是随机的,想自定义名称 建议,直接使用命令执行 hostnamectl set-hostname rdd-test重新连接即可生效,实际也是修改了/etc/hostname名称 需要…

十三、前端开发知识快速入门

目录 一、HTML概述和基本结构1.1 概述1.2 基本结构1.3 html文档类型1.4 html注释 二、HTML常用标签2.1 块标签2.2 行内标签2.3 字符实体2.4 图片标签2.5 链接标签2.6 列表标签2.7 表单2.8 表格 三、页面布局四、CSS样式4.1 基本语法和页面引用4.2 文本样式设置4.3 颜色表示法4.…

中国陆地生态系统服务价值空间分布数据集

简介: 中国陆地生态系统服务价值空间分布产品是以全国陆地生态系统类型遥感分类为基础,生态系统类型包括:旱地、农田、针叶林、针阔混交林、阔叶林、灌木林、草原、灌草丛、草甸、湿地、荒漠、裸地、水系、冰川积雪、人工表面(包…

B端产品需求分析的思路和方法 4大方面

需求分析对产品成功和客户满意度至关重要,它帮助团队深入了解用户需求,优化用户体验,减少开发中的需求变更,降低开发风险。如果缺乏产品分析,容易造成产品定位不准确,用户体验不佳,不能满足用户…

迷你Ceph集群搭建(超低配设备)

我的博客原文链接:https://blog.gcc.ac.cn/post/2023/%E8%BF%B7%E4%BD%A0ceph%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA/ 环境 机器列表: IP角色说明10.0.0.15osdARMv7,512M内存,32G存储,百兆网口10.0.0.16clientARM64…

【C语言】atoi函数的模拟

atoi对于初学者来说大概率是一个陌生的函数 但不要害怕,我们可以通过各种网站去查询 例如: cplusplus就是一个很好的查询网站 目录 函数介绍模拟实现需要注意的点 函数介绍 我们发现这是一个将字符串转换为整形数字的函数 例如: int main()…

C++类和对象(下)

目录 一、初始化列表 二、单参构造参数和explicit关键字 三、匿名对象 四、static成员 五、友元 六、内部类 一、初始化列表 之前我们在构造函数中写得还不错,也没发现什么问题,为什么C还有搞一个初始化列表呢? 如下这段代码&#x…

FPGA project : sobel

实验目标: sobel算法,处理100X100灰度图像:野火logo 边缘检测: 边缘检测,针对的是灰度图像,顾名思义,检测图像的边缘,是针对图像像素点的一种计算,目的是标识数字图像…

vue3学习(二)--- ref和reactive

文章目录 ref1.1 ref将基础类型和对象类型数据转为响应式1.2 ref()获取id元素1.3 isRef reactive1.1 reactive()将引用类型数据转为响应式数据,基本类型无效1.2 ref和reactive的联系 toRef 和 toRefs1.1 如果原始对象是非响应式的就不会更新视图 数据是会变的 ref …

点燃市场热情,让产品风靡全球——实用推广策略大揭秘!

文章目录 一、实用推广策略的重要性1. 提高产品知名度和认可度2. 拓展产品市场和用户群体3. 增强企业品牌形象和市场竞争力 二、实用推广策略的种类1. 社交媒体推广2. 定向推广3. 口碑营销4. 内容推广 三、实用推广策略的实施步骤1. 研究目标用户和市场需求,明确产品…

大数据NoSQL数据库HBase集群部署

目录 1. 简介 2. 安装 1. HBase依赖Zookeeper、JDK、Hadoop(HDFS),请确保已经完成前面 2. 【node1执行】下载HBase安装包 3. 【node1执行】,修改配置文件,修改conf/hbase-env.sh文件 4. 【node1执行】&#xf…

第14章总结:lambda表达式与处理

14.1: lambada表达式 14.1.1:lambada表达式简介 无参数 package fourteen; interface SayhHi{ String say();//抽象方法接口 } public class NoParamDemo { public static void main(String[] args) { //无参数 …

【AI视野·今日Robot 机器人论文速览 第五十二期】Wed, 11 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Wed, 11 Oct 2023 Totally 31 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers RoboHive: A Unified Framework for Robot Learning Authors Vikash Kumar, Rutav Shah, Gaoyue Zhou, Vincent Moens, Vittor…

SAP MM学习笔记35 - 请求书照合中的差额处理(发票扣减,受入)

SAP中,请求书照合之后,发现不一致,就会支付保留。 支付保留,可以参考如下文章。 SAP MM学习笔记34 - 请求书照合中的支付保留(发票冻结)_东京老树根的博客-CSDN博客 即使支付保留之后暂时不付钱&#xff…

外卖跑腿系统开发的最佳实践和成功案例

外卖跑腿系统的开发既涉及技术实现,也需要考虑用户体验、运营策略和合规性。以下是一些最佳实践和一些成功的案例,以帮助您更好地理解这个领域的要点。 1. 技术框架的选择 选择适合的技术框架是外卖跑腿系统成功的关键。您可以考虑使用以下技术&#…

mysql面试题45:读写分离常见方案、哪些中间件可以实现读写分离

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说你知道的读写分离常见方案 读写分离是一种常见的数据库架构方案,旨在分担数据库的读写压力,提高系统的性能和可扩展性。以下是两种常见的…

Nacos 小bug: application.properties配置未生效,导致端口未生效

最近用了下nacos 1.4.6 ,发现windows 中修改配置中的启动端口未生效,其实就是配置文件没读取到。 去github 逛了一下issue ,参考这个:https://github.com/alibaba/nacos/issues/10217 这哥们儿是nacos 1.4.5 Linux系统下的相同问题,shell 中…

HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Radio

单选框,提供相应的用户交互选择项。该组件从API Version 8开始支持。无子组件。 一、接口 Radio(options: {value: string, group: string}) 从API version 9开始,该接口支持在ArkTS卡片中使用。 参数: 二、属性 除支持通用属性外,还支持以…

更新 | 持续开源迅为RK3568驱动指南第十二篇-GPIO子系统

《iTOP-RK3568开发板驱动开发指南》更新,本次更新内容对应的是驱动(第十二期_GPIO子系统-全新升级)视频,后续资料会不断更新,不断完善,帮助用户快速入门,大大提升研发速度。 文档教程更新至第十…