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.rhkb.cn/news/157259.html

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

相关文章

华为云Stack的学习(九)

十、华为云Stack灾备服务介绍 1.云硬盘备份VBS 云硬盘备份服务(VBS,Volume Backup Service)可为云硬盘(EVS,Elastic Volume Service)创建备份,利用备份数据恢复云硬盘,最大限度保障…

『PyQt5-Qt Designer篇』| 13 Qt Designer中如何给工具添加菜单和工具栏?

13 Qt Designer中如何给工具添加菜单和工具栏? 1 创建默认窗口2 添加菜单栏3 查看和调用1 创建默认窗口 当新创建一个窗口的时候,默认会显示有:菜单栏和状态栏,如下: 可以在菜单栏上右键-移除菜单栏: 可以在菜单栏上右键-移除状态栏: 2 添加菜单栏 在窗口上,右键-创建…

【QT】Ubuntu 搭建 QT 环境(图形化界面安装)

介于直接使用源码编译安装 QT 耗时较长,而且需要手动编写脚本进行编译,难度较大,这里选择直接以图形化界面的方式安装 QT 。 目录 1、下载 QT 安装包 2、安装 QT 3、添加环境变量 4、cmake 引入 QT 库 5、Failed to find “GL/gl.h“ in…

巧用h2-database.jar连接数据库

文章目录 一 、概述二、实践三、解决办法 一 、概述 H2 Database是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2 Database提供了一个十分方便的web控制台用于操作和管理数据库内容。H2 Database还提供兼容模式&#…

jmeter实现webservice接口测试

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

LeetCode【15】三数之和

题目&#xff1a; 解析&#xff1a; 参考&#xff1a;https://zhuanlan.zhihu.com/p/111715985 代码&#xff1a; public static List<List<Integer>> threeSum(int[] nums) {// 先排序Arrays.sort(nums);List<List<Integer>> result new ArrayLis…

力扣-415.字符串相加

Idea 模拟&#xff1a;竖式加法 从后面往前逐位相加&#xff0c;然后将相加的结果模10&#xff0c;添加到答案字符串中去 最后需要判断一下是否还有进位问题 需要将答案string翻转 AC Code class Solution { public:string addStrings(string num1, string num2) {string ans;…

【VR】【Unity】白马VR课堂系列-VR开发核心基础03-项目准备-VR项目设置

【内容】 详细说明 在设置Camera Rig前,我们需要针对VR游戏做一些特别的Project设置。 点击Edit菜单,Project Settings,选中最下方的XR Plugin Management,在右边面板点击Install。 安装完成后,我们需要选中相应安卓平台下的Pico VR套件,关于怎么安装PICO VR插件,请参…

项目成本超支的主要原因以及解决方法

成本超支&#xff0c;是每个项目经理在其职业生涯中都会遇到的一个问题。当项目的实际成本超过估计或预算成本时&#xff0c;就会发生成本超支。这在建筑、制造和软件开发项目中尤其常见&#xff0c;并影响着项目的盈利能力、利益相关者满意度和竞争优势。 成本超支的原因 由…

2023年中国渔业研究报告

第一章 行业概况 1.1 定义 渔业&#xff0c;作为全球经济的重要支柱之一&#xff0c;其核心活动包括捕捞、水产养殖、产品加工与销售等。其不仅是食物安全的重要保障&#xff0c;还是许多沿海和内陆地区经济发展的重要动力。 首先&#xff0c;捕捞活动是渔业的基础。通过海洋…

C语言纳秒级计时

C语言纳秒级计时 文章目录 C语言纳秒级计时函数介绍示例代码参考 函数介绍 C语言中常用的clock()函数只能精确到毫秒级&#xff0c;对应的数据类型是clock_t。 C11标准中提供了纳秒级别定时器&#xff1a;timespec_get()函数与timespec()类型。 struct timespec{time_t tv_s…

解决ERROR: No query specified的错误以及\G 和 \g 的区别

文章目录 1. 复现错误2. 分析错误3. 解决问题4. \G和\g的区别 1. 复现错误 今天使用powershell连接数据库后&#xff0c;执行如下SQL语句&#xff1a; mysql> select * from student where id 39 \G;虽然成功查询除了数据&#xff0c;但报出如下错误的信息&#xff1a; my…

如何下载IEEE Journal/Conference/Magazine的LaTeX/Word模板

当你准备撰写一篇学术论文或会议论文时&#xff0c;使用IEEE&#xff08;电气和电子工程师协会&#xff09;的LaTeX或Word模板是一种非常有效的方式&#xff0c;它可以帮助你确保你的文稿符合IEEE出版的要求。无论你是一名研究生生或一名资深学者&#xff0c;本教程将向你介绍如…

炒现货白银的最佳时间

天时地利人和是我们进行现货白银投资最关键的因素。天时是指我们因时而动&#xff0c;在适合的时机出击。地利&#xff0c;就是我们对市场的定位&#xff0c;对自己入场的定位有清晰的了解&#xff0c;并且这些位置对我们有利。人和就是指投资者的状态很好&#xff0c;对如何进…

conda 创建虚拟环境

1.为什么要创建虚拟环境 我们在做开发或者跑论文实验可能会同时进行多个任务&#xff0c;这些任务可能会依赖于不同的python环境&#xff0c;比如有的用到3.6有的用到3.7&#xff0c;这时我们创建不同版本的python&#xff0c;放到虚拟环境中给不同的任务分别提供其所需要的版本…

2023年中国固废处理行业研究报告

第一章 行业概况 1.1 定义 固体废物处理是一个日益重要的领域&#xff0c;随着中国城市化进程的加速和工业产值的持续增长&#xff0c;固体废物的产生量也在不断上升。根据《固体废物污染环境防治法》的定义&#xff0c;固体废物包括了人类在生产、生活和其他活动中产生的固态…

部署zabbix代理服务器、部署zabbix高可用集群

目录 部署zabbix代理服务器 1、环境设置 2、设置 zabbix 的下载源&#xff0c;安装 zabbix-proxy 3、配置Mariadb yum源&#xff0c;并下载marisdb数据库 4.、启动数据库&#xff0c;并初始化数据库 5、登录数据库&#xff0c;创建数据库并指定字符集&#xff0c;并进行…

AutoGPT:让 AI 帮你完成任务事情 | 开源日报 No.54

Significant-Gravitas/AutoGPT Stars: 150.4k License: MIT AutoGPT 是开源 AI 代理生态系统的核心工具包。它采用模块化和可扩展的框架&#xff0c;使您能够专注于以下方面&#xff1a; 构建 - 为惊人之作打下基础。测试 - 将您的代理调整到完美状态。查看 - 观察进展成果呈…

C/C++笔试易错题+图解知识点(二)—— C++部分

目录 1.构造函数初始化列表 1.1 构造函数初始化列表与函数体内初始化区别 1.2 必须在初始化列表初始化的成员 2. 引用初始化以后不能被改变&#xff0c;指针可以改变所指的对象 1.构造函数初始化列表 有一个类A&#xff0c;其数据成员如下&#xff1a; 则构造函数中&#xff0c…

有哪些免费的PPT模板网站,推荐这6个PPT模板免费下载网站!

混迹职场的打工人&#xff0c;或是还在校园的学生党&#xff0c;在日常的工作汇报或课程作业中&#xff0c;必然少不了PPT的影子&#xff0c;而每当提到做PPT&#xff0c;许多人首先会想到&#xff1a;有哪些免费的PPT模板下载网站&#xff1f; 本着辛苦自己&#xff0c;造福所…