CMake和VsCode调试的使用

目录

CMake使用

CMake下载

创建系统文件目录

MakeList编写规范

VsCode启动调试

添加配置文件

添加断点,启动调试


CMake使用

CMake下载

输入指令

sudo apt install cmake

安装cmake,使用 cmake -version可查看cmake的版本信息

创建系统文件目录

系统文件目录通常分为bin、include、src、build等

 bin主要存放可执行文件

include存放头文件

src存放cpp文件

build存在makelist生成文件

MakeList编写规范

需要配置版本、目录等信息,简单配置如下:

# cmake配置# 1、设置对cmake的最小版本
cmake_minimum_required(VERSION 3.0)# 2、设置工程名
project(apply VERSION 12.0 DESCRIPTION "这是一个项目级别的工程")# 3、指定需要的头文件目录
include_directories(include) # 相对于CMakeLists.txt所在的目录# 4、获取指定目录下的所有cpp文件,用SRC_LIST变量代替
# 如果src目录下的cpp文件很多,在生成可执行文件时一个个写出来十分不便,所以可以使用这个命令方便使用
# aux_source_directory(src SRC_LIST)# 4.1
# aux_source_directory虽然能够很方便的获取所有cpp,但是某些情况下有部分cpp不需要,此时可以使用set命令解决
# 相当于是 ./src/Math.cpp ./src/main.cpp
set(SRC_LIST ./src/Math.cpp./src/main.cpp
)# 5、生成可执行文件,这里的所有cpp文件用变量替代
#executable 可执行的 后面放的是项目的cpp文件
add_executable(app ${SRC_LIST})# 6、设置目标对象(可执行文件)的输出目录。即app可执行文件就会输出到bin目录中
# EXECUTABLE_OUTPUT_PATH是cmake中已定义的变量,表示目标二进制可执行文件的存放位置
# PROJECT_SOURCE_DIR 是工程根目录的变量
# set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

编写总结如下:

# 使用动态库静态库# 设置项目对cmake的最低要求
cmake_minimum_required(VERSION 3.25)# 设置工程名以及版本
project(AppSO VERSION 2.1)# 设置头文件变量,其包含所有需要的头文件。
# 第一个目录是本项目的,第二个是动态库的头文件目录,第三个是静态库头文件目录
set(headers include ../3.29.3/include ../3.29.5/include)# 设置头文件变量到项目中
include_directories(${headers})# 设置编译选项
add_compile_options(-Wall -std=c++11 -g)# 设置资源变量
set(cpps src/program.cpp src/main.cpp)# 生成指定的可执行程序
add_executable(app ${cpps})# 情况一:libtps.so放在/usr/lib目录中
# 找到动态库,这里是已经把libtps.so放到了默认索的路径中
# TPS_LIB_VAR 相当于替换libtps.so
# find_library(TPS_LIB_VAR tps) 
# 添加动态库连接相当于g++ -l
# target_link_libraries(app ${TPS_LIB_VAR})# 情况二:是不将动态libtps.so放到指定默认的搜索目录中
# add_library命令创建一个名为tps的目标,表示一个动态库。IMPORTED选项告诉CMake这个目标不是通过源代码编译出来的,而是外部已经编译好的目标。
# 然后使用set_target_properties命令设置tps目标的属性,其中IMPORTED_LOCATION属性指定了动态库文件的路径。
# 最后,target_link_libraries命令将动态库链接到app可执行文件中。命令如下:
# add_library(tps_obj SHARED IMPORTED)
# set_target_properties(tps_obj PROPERTIES IMPORTED_LOCATION /home/yoyo/workspaces/cmakes/3.29.3/build/libtps.so)
# target_link_libraries(app tps_obj)# 情况三:与情况二相同,只是操作方式不同
find_library(TPS_LIB_VAR_ tps HINTS /home/yoyo/workspaces/cmakes/3.29.3/build/)
# 第二个目录是静态库文件(静态库比较简单,直接写就行)前面是动态库 后面这个目录是静态库
set(libs ${TPS_LIB_VAR_} /home/yoyo/workspaces/cmakes/3.29.5/build/libstps.a)# 连接所有的库
target_link_libraries(app ${libs})# 设置可执行程序的输出目录
set_target_properties(app PROPERTIESRUNTIME_OUTPUT_DIRECTORY "../bin"
)

编写完成后进入到build文件,使用cmake ../指令就会找到Cmakelist.txt文件之后就会将一系列文件生成到build文件夹。使用make生成可执行文件,之后app会生成在bin目录下。

VsCode启动调试

添加配置文件

在运行文件夹中点击添加配置,需要配置launch.json和tasks.json文件。

tasks.json文件配置如下

{"version": "2.0.0","tasks": [{"label": "cmake","type": "shell","command": "cmake","args": ["../"],"options": {"cwd": "${fileDirname}/build"},            },{"label": "make","type": "shell","command": "make","args": [],"options": {"cwd": "${fileDirname}/build"}, },{"label": "build","dependsOn":["cmake", "make"]},],
}

可以看出,上面的 tasks.json 文件主要包含三个命令:

label为cmake的任务:执行shell类型的cmake命令,其参数为 ../,执行时所在的目录为${fileDirname}/build。这个命令等价于在build目录下执行cmake ../
label为make的任务:执行shell类型的make命令,没有参数,执行时所在的目录为${fileDirname}/build。这个命令等价于在build目录下执行make
label为build的任务:该任务由cmake和make任务组成,也就是将上面两条命令执行的过程组合成一个build任务。

之后编写launch.json文件

{"version": "0.2.0","configurations": [{"name": "g++ - Build and debug active file", //配置文件名称 可任意取"type": "cppdbg", //调试类型"request": "launch", //配置文件请求类型"program": "${workspaceFolder}/build/app", //可执行文件的路径和名称 ${workspaceFolder}代表当前的工作目录"args":[], //主函数传入参数"stopAtEntry": false, //设为true时程序将暂停在程序入口处"cwd": "${workspaceFolder}",//运行目录 也就是makelist常在目录"environment": [], //配置依赖的静态库和动态库环境目录"externalConsole": false,"MIMode": "gdb", //使用gdb调试"setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "build", // //调试会话时开始执行的文件,一般为编译文件,与tasks.json的label一致"miDebuggerPath": "/usr/bin/gdb" //调试工具所在位置}]
}

添加断点,启动调试

点击f5之后运行然后进行调试工作即可。 

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

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

相关文章

土耳其商务团一行莅临优积科技考察交流

7月31日土耳其商务代表Emre Arif Parlak等一行三人莅临优积科技考察交流,公司CEO刘其东携团队成员热情接待并深入交流。 商务团首先参观了我司产品生产基地,详细了解了钢结构模块的生产加工工艺流程和质量控制体系。随后参观了我司模块化学校样板房、模块…

Python-语句

一、if语句 格式 if 条件: 条件成立执行的代码 if True:print(条件成立执行的代码) print(这个代码执行吗?)上述代码两个print均执行 if False:print(条件成立执行的代码) print(这个代码执行吗?)只执行第二个print 2.总结 对于未缩进的代码&#x…

Git+py+ipynb Usage

0.default config ssh-keygen -t rsa #之后一路回车,当前目录.ssh/下产生公私钥 cat ~/.ssh/id_rsa.pub #复制公钥到账号 git config --global user.email account_email git config --global user.name account_namebug of ipynb TqdmWarning: IProgress not found. Please …

Springboot日常总结-@RestController和@Controller的区别

RestController和 Controlle是两种不同的控制器实现,它们的主要区别在于如何处理返回的数据和是否支持跳转到视图页面。 Controller 是一个基本的控制器注解,它允许你将一个类标记为一个Spring MVC控制器处理器。使用 Controller 的类中的方法可以直接返…

c++学习记录 string容器—字符串比较

比较方式&#xff1a; 字符串比较是按照字符的ASCII码进行对比 返回 0> 返回 1< 返回 -1 函数原型&#xff1a; int compare(const string& s) const; //与字符串s比较int compare(const char* s) const; //与字符串s比较 #include<iostream> using name…

一文1400字使用Jmeter进行http接口测试【建议收藏】

前言&#xff1a; 本文主要针对http接口进行测试&#xff0c;使用Jmeter工具实现。Jmter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较成熟&#xff0c;因此&#xff0c;本次直接使用Jmeter工具来完成对Http接口的测试。 一、开发接口…

【JavaSE】集合框架

目录 程序场景分析 Java集合框架包含的内容List接口ArrayListLinkedListList接口的常用方法ArrayList案例背景分析代码示例扩展以下功能代码示例 LinkedList案例背景分析代码示例LinkedList的特殊方法 ArrayList与LinkedList对比 Set接口HashSet 集合的特点常用方法案例背景分析…

[c 语言] 大端,小端;网络序,主机序

在网络编程中&#xff0c;特别是底层网卡驱动开发时&#xff0c;常常遇到字节序问题。字节序指的是多字节数据类型在内存中存放的顺序&#xff0c;高位保存在低地址还是高地址&#xff0c;以此来划分大端还是小端。 1 大端和小端 大端和小端指的是 cpu 的属性&#xff0c;常见…

Vulhub 靶场训练 DC-9解析

一、搭建环境 kali的IP地址是&#xff1a;192.168.200.14 DC-9的IP地址暂时未知 二、信息收集 1、探索同网段下存活的主机 arp-scan -l #2、探索开放的端口 开启端口有&#xff1a;80和22端口 3、目录扫描 访问80 端口显示的主页面 分别点击其他几个页面 可以看到是用户…

SpringBoot源码解读与原理分析(三十四)SpringBoot整合JDBC(三)声明式事务的传播行为控制

文章目录 前言10.5 声明式事务的传播行为控制10.5.1 修改测试代码&#xff08;1&#xff09;新建一个Service类&#xff0c;并引用UserService&#xff08;2&#xff09;修改主启动类 10.5.2 PROPAGATION_REQUIRED10.5.2.1 tm.getTransaction&#xff08;1&#xff09;获取事务…

一拖二ADG数据库拆除其中一个复制关系

一、备库一操作 1、检查 select name,open_mode,switchover_status,database_role from v$database; select group#,thread#,status from v$standby_log; select thread#,sequence#,first_time,next_time,applied from v$archived_log where thread#1 order by 4; select …

用于自监督视觉预训练的屏蔽特征预测

Masked Feature Prediction for Self-Supervised Visual Pre-Training 一、摘要 提出了用于视频模型自监督预训练的掩模特征预测&#xff08;MaskFeat&#xff09;。首先随机屏蔽输入序列的一部分&#xff0c;然后预测屏蔽区域的特征。研究了五种不同类型的特征&#xff0c;发…

netfilter内核实现

Netfilter是Linux内核中的一个框架&#xff0c;用于实现数据包的过滤、NAT(Network Address Translation)、连接追踪以及其他网络功能。Netfilter框架的主要实现包括如下几个部分&#xff1a; 钩子函数&#xff08;Hooks&#xff09;&#xff1a;Netfilter框架在Linux内核中通…

遥感、航拍、影像等用于深度学习的数据集集合

遥感图像的纹理特征异常繁杂&#xff0c;地貌类型多变&#xff0c;人工提取往往存在特征提取困难和特征提取不准确的问题&#xff0c;同时&#xff0c;在这个过程中还会耗费海量的人力物力。随着计算力的突破、数据洪流的暴发和算法的不断创新&#xff0c;在具有鲜明“大数据”…

我们的C++(基础)(中文翻译版)

什么是C&#xff1f; C是一种高级语言。它由 Bjarne Stroustrup 于 1979 年在贝尔实验室设计和开发。C 是一种面向对象的编程语言&#xff0c;它扩展和改进了 C 语言。C 可在各种平台上运行&#xff0c;例如 Windows、MAC 操作系统和 UNIX 版本。 C 是一种静态类型、编译、通…

ffmpeg的pcm、yuv小知识点

ffmpeg的pcm、yuv小知识点 pcm、yuv保存调用&#xff0c;写个通用工具方法&#xff0c;平时快速保存&#xff0c;和调用方便查看自己bug ffmpeg的AVFrame存储 yuv 调用方法 保存方法 void save_yuv420p_file(unsigned char *y_buf , unsigned char *u_buf,unsigned char *…

git commit 后,本地远端都没有记录,消失不见

今天git commit 之后发现远端没有记录&#xff0c;本地没有最新代码记录 git commit 后&#xff0c;提交记录会消失不见的原因可能是&#xff1a; git只git commit了&#xff0c;没有push到远程分支&#xff0c;切换到其他分支时丢失。而且看不到提交记录&#xff0c;和找不到…

美团2024届秋招笔试第一场编程真题——小美的字符串变换

小美拿到了一个长度为n的字符串&#xff0c;她希望将字符串从左到右平铺成一个矩阵&#xff08;先平铺第一行&#xff0c;然后是第二行&#xff0c;以此类推&#xff0c;矩阵有x行y列&#xff0c;必须保证x∗yn&#xff0c;即每y个字符换行&#xff0c;共x行&#xff09;。 该…

2024.2.21 模拟实现 RabbitMQ —— 实现转发规则

目录 需求分析 直接交换机&#xff08;Direct &#xff09; 主题交换机&#xff08;Topic &#xff09; 扇出交换机&#xff08;Fanout &#xff09; Topic 交换机转发规则 routingKey 组成 bindingKey 组成 匹配规则 情况一 情况二 情况三 实现 Router 类 校验 b…

Spring Boot application.properties和application.yml文件的配置

在Spring Boot中&#xff0c;application.properties 和 application.yml 文件用于配置应用程序的各个方面&#xff0c;如服务器端口、数据库连接、日志级别等。这两个文件是Spring Boot的配置文件&#xff0c;位于 src/main/resources 目录下。 application.properties 示例 …