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.hqwc.cn/news/492804.html

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

相关文章

unity导航网格无法烘培到台阶和斜坡

如图是我在b站学Unity导航网格时建的一个示例场景,本场景使用的为棱长1m的立方体,读者可以以此为参照度量其他物体大小。 可见导航网格根本无法烘焙到斜坡和台阶上,为解决问题我做了不少尝试,调整最大坡度和步高都没办法解决问题…

图像复原天花板!IR开创性新作实现最佳视觉质量,修复更智能、更逼真

图像复原(IR)指在已知图像退化的原因和模型的情况下,通过一系列的逆过程来恢复出原始图像的过程。这是一个长期的低级视觉任务,也是图像处理领域的一个重要课题。 随着深度学习技术的发展,图像复原领域不断出现新的网…

鸿蒙开发—【扩展textinput组件】

扩展鸿蒙textinput组件,支持快速扩展展性,标题文本等,文本内容双向绑定、文本组件快速复用。 /*** 单选文本*/ Component export default struct DiygwInput{//绑定的值Link value:string;//未选中图标State labelImg: Resource $r(app…

振动解调用的包络谱计算

1缘起 在振动分析中,对于一些高频频点的分析计算,使用包络谱技术,进而得到特化谱是最适宜的。我们看matlab信号分析中提供的一个实例: https://www.mathworks.com/help/signal/ug/compute-envelope-spectrum.html 轴承故障有4个…

GB28181视频监控平台EasyCVR如何通过配置实现级联不响应下级平台的检索消息?

AI视频智能分析/视频监控管理平台EasyCVR能在复杂的网络环境中(专网、内网、局域网、广域网、公网等)将前端海量的设备进行统一集中接入与视频汇聚管理,平台支持设备通过4G、5G、WIFI、有线等方式进行视频流的快捷接入和传输。平台能将接入的…

海外智能充电桩系统开发: 助力您的新能源业务扬帆起航

一、市场趋势:海外新能源汽车市场蓬勃发展 近年来,全球新能源汽车市场呈现爆发式增长态势,各国政府纷纷出台政策鼓励新能源汽车发展,消费者对新能源汽车的接受度也不断提高。根据国际能源署(IEA)预测&…

3 Nacos源码下载并集成达梦数据库驱动

1、Nacos源码下载 源码直接下载gitee上的nacos2.2.3,具体链接:Nacos: 概览 欢迎来到 Nacos 的世界! Nacos 致力于帮助您发现、配置和管理微服务 - Gitee.com,具体如下图

数学建模【GM(1, 1)灰色预测】

一、GM(1, 1)灰色预测简介 乍一看,这个名字好奇怪,其实是有含义的 G:Grey(灰色)M:Model(模型)(1, 1):只含有一个变量的一阶微分方程模型 提到灰色,就得先说…

华为配置WDS背靠背业务示例

配置WDS背靠背业务示例 组网图形 图1 配置WDS背靠背组网示意图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 在某些企业网络中,有线网络部署受施工条件的限制,需要连接的网络之间有障碍物或传输距离较远,AP无法全…

day06_数组

今日内容 数组入门 理解数组功能数组声明创建数组操作(取值,赋值)遍历练习题内存图 复习 一、数组的介绍 数组就是一个容器,用来装多个数据的。 java的数组有特点 数组长度是固定的数组存储的类型是固定的可以存储重复元素 基本语法(声明创建): 数据…

5.4 内容管理模块 - 课程搜索

5.4 内容管理模块 - 课程搜索 文章目录 5.4 内容管理模块 - 课程搜索一、快速入门1.1 需求分析1.2 业务流程1.3 准备环境1.3.1 搭建 elasticsearch1.3.2 索引 概念 1.4 课程信息索引同步1.4.1 技术方案 一、快速入门 本项目使用elasticsearch作为索引及搜索服务 课程如果发布之…

ubuntu内核卸载重装

目录 问题1.问题复现2.可以正常启动的方式 保存快照卸载有问题的内核重装最新内核参考资料 问题 1.问题复现 ubuntu开机出现如下画面,启动不能正常启动 2.可以正常启动的方式 使用其他内核可以正常工作 保存快照 在解决之前保存快照,防止破坏时恢复 卸载有问题的内核…