关于ubuntu环境下vscode进行debug的随笔

CMakeLists.txt的编写

顶层目录的CMakelists.txt

  1. 目录:./CMakeLists.txt
#./CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(xxx_project_name LANGUAGES CXX)		#设置工程名# 设置 C++ 标准和编译选项
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -msse4.1")  # 启用 SSE4.1 优化#配置是debug OR release
if(NOT CMAKE_BUILD_TYPE)set(CMAKE_BUILD_TYPE Release)message(STATUS "Build type not specified: defaulting to Release.")
endif(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")#添加动态库
link_libraries(m)
link_libraries(pthread)#添加目录所有.c/cpp 到 DIR_SRCS
#aux_source_directory(<dir> <var>)只收集c/cpp、不递归、不感知新增文件
aux_source_directory(. DIR_SRCS) 
#file(GLOB <var> <pattern>) 自定义收集文件、支持递归、新增文件需要重新运行cmake、可能匹配多余文件,如备份文件
file(GLOB SOURCES "*.cpp")       # 手动指定通配符模式
file(GLOB_RECURSE SOURCES "src/**/*.cpp")  # 递归
#set(<var> <filelist>) 维护成本高
set(SOURCES "main.cpp" "util.cpp")  # 显式列出所有文件include_directories(${PROJECT_BINARY_DIR}/lib/include)
include_directories(${PROJECT_SOURCE_DIR}/lib/include)# generate executalbe file
add_executable(xxx_project_name ${DIR_SRCS})# 额外
# 添加 需要子目录
add_subdirectory(lib)
add_subdirectory(utils)
add_subdirectory(common)
# 添加链接库
target_link_libraries(xxx_project_name utils)
target_link_libraries(xxx_project_name ch_estimation)
target_link_libraries(xxx_project_name common)

2.1 ./utils/CMakeLists.txt

# ./utils/CMakeLists.txt
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)# 生成链接库
add_library (utils ${DIR_LIB_SRCS})

./lib/CMakeLists.txt

#./lib/CMakeLists.txtadd_subdirectory(src)
add_subdirectory(include)
add_subdirectory(examples)
add_subdirectory(test)INSTALL(  DIRECTORY include/DESTINATION "${INCLUDE_DIR}"FILES_MATCHING PATTERN "*.h" )

./lib/src/CMakeLists.txt

#./lib/src/CMakeLists.txt
add_subdirectory(phy)

./lib/src/phy/CMakeLists.txt

#./lib/src/phy/CMakeLists.txt
add_subdirectory(phch)set(srsran_srcs $<TARGET_OBJECTS:srsran_phch>)
#$<TARGET_OBJECTS:target_name> 生成器表达式        
#​功能​:获取指定目标(通常是对象库)编译生成的 ​对象文件列表​(.obj/.o 文件)#使用前提​:
#target_name 必须是已定义的对象库(OBJECT 库)
#对象库通过 add_library(... OBJECT) 声明add_library(srsran_phy STATIC ${srsran_srcs})
target_link_libraries(srsran_phy pthread m ${FFT_LIBRARIES})
install(TARGETS srsran_phy DESTINATION ${LIBRARY_DIR} OPTIONAL)

.\lib\src\phy\phch\CMakeLists.txt

# .\lib\src\phy\phch\CMakeLists.txt
file(GLOB SOURCES "*.c")
add_library(xxx_sf1_1_name OBJECT ${SOURCES})
add_subdirectory(sf1_1_1_name)

.\lib\src\phy\phch\test\CMakeLists.txt

# .\lib\src\phy\phch\test\CMakeLists.txt
set(CTEST_LABELS "lib;phy;phch")
add_executable(pmch_test pmch_test.c)
target_link_libraries(pmch_test srsran_phy)

vscode::tasks.json

此时需要注意:

  • 如果在CMakeLists.txt文件中对CMAKE_BUILD_TYPE的设置是Release时,想要在vscode进行单步调试,需要在cmake configure这个过程中添加-DCMAKE_BUILD_TYPE=Debug
  • 参数里面的"-S",“${workspaceFolder}”等价于
{"version": "2.0.0","tasks": [{"label": "CMake: Configure","type": "cppbuild","command": "cmake","args": ["-S", "${workspaceFolder}","-B", "${workspaceFolder}/build",// "-G", "Ninja",//如果在CMakeLists.txt文件中设置的是//set(CMAKE_BUILD_TYPE Release CACHE STRING "")时//想step debug,需要如下配置"-DCMAKE_BUILD_TYPE=Debug",//"-DCMAKE_BUILD_TYPE=Release",],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "Task generated by Debugger."},{"label": "CMake: build","type": "cppbuild","command": "make","args": ["-C", "${workspaceFolder}/build","-j", "4","all"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"dependsOn":["CMake: Configure"],"detail": "Task generated by Debugger."},],
}

vscode::launch.json

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [       {"name": "(gdb) Launch","type": "cppdbg","request": "launch","program": "${workspaceFolder}/build/modem","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "Set Disassembly Flavor to Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "CMake: build",},{"name": "(gdb) Launch pmch_test","type": "cppdbg","request": "launch","program": "${workspaceFolder}/buildM/lib/src/phy/phch/test/pmch_test","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}/buildM/lib/src/phy/phch/test/","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "Set Disassembly Flavor to Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "CMake: build",},]
}

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

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

相关文章

技术演进中的开发沉思-9:window编程系列-内核对象线程同步(下)

今天我们继续走进 Windows 内核的世界&#xff0c;就昨天没说完的内核对象与线程同步内容接着继续&#xff0c;它们就像精密仪器里的齿轮&#xff0c;虽不显眼&#xff0c;却至关重要。 异步设备 I/O 在 Windows 系统中&#xff0c;异步设备 I/O 就像是一场精心编排的接力赛。…

用AI从0开始量化交易-Anaconda环境(env)和缓存(pkg)更改储存位置

之前介绍了Anaconda的安装和环境建立&#xff0c;最近自己的量化交易工具开发的差不多了&#xff0c;却发生了尴尬的问题&#xff0c;C盘被不断增大的conda环境和缓存占据得快满了。 在网上找了些教程&#xff0c;大多是讲迁移的&#xff0c;专门讲改本地改储存位置的比较少&am…

Python爬虫工作基本流程及urllib模块详解

在2025年的数据驱动时代&#xff0c;网络数据成为企业与个人的“金矿”&#xff0c;而Python爬虫则是挖掘这金矿的“利器”&#xff01;无论是抓取电商价格、分析社交媒体趋势&#xff0c;还是构建知识库&#xff0c;Python爬虫都能让你事半功倍。然而&#xff0c;爬虫开发并非…

thinkphp8 模型-一对一,一对多,多对多 学习

thinkphp 命令创建模型&#xff08;和laravel基本一样&#xff09; php think make:model User 在模型里创建字段 protected $table User; protected $pk id; // 定义返回哪些字段 protected $field [id, name]; // 返回字段的类型 protected $schema [id > int] 模…

非线性方程组求解:复杂情况下的数值方法

在科学研究和工程应用中&#xff0c;非线性方程组的求解是一个常见的挑战。尤其当方程组包含复杂函数&#xff08;如特殊函数、积分、微分等&#xff09;&#xff0c;使得雅可比矩阵难以解析求导时&#xff0c;传统的基于解析雅可比矩阵的 Newton-Raphson 方法难以直接应用。本…

边缘计算网关EG8200Mini首发开箱视频丨破解工业互联“协议孤岛”,重塑数据价值核心引擎行业痛点直击|低代码开发

数据采集4G边缘计算网关plc 工业现场设备品牌林立&#xff08;西门子、三菱、欧姆龙等30品牌PLC&#xff09;、协议碎片化&#xff08;Modbus/OPC UA/BACnet等&#xff09;、网络环境复杂&#xff08;户外无光纤、车间电磁干扰&#xff09;——传统网关难以实现多源异构设备统一…

2024-2025下期《网络设备与配置》期末模拟测试

一、 单选题(每题2分&#xff0c;共60分) RIP协议的默认最大跳数是&#xff08; &#xff09; A. 10 B. 15 C. 20 D. 30以下哪个命令可以用来在交换机上进入全局配置模式&#xff1f;&#xff08; &#xff09; A. 使用enable命令 B. 使用configure terminal命令 C. 使用inte…

虹科案例 | 欣旺达如何实现动力电池测试的长期稳定性+自动化?

新能源汽车产业狂飙突进&#xff0c;动力电池测试正面临前所未有的技术大考。 传统电池测试方案常因数据丢帧、协议适配等问题&#xff0c;导致测试周期延长和交付延期。在这场关乎安全与效率的产业竞速中&#xff0c;高精度数据采集与全球化交付能力&#xff0c;已成为动力电…

第17天:数据库学习笔记1

数据库学习笔记 1 SQL语言介绍 2 数据库的安装 2.1 启动数据库 方式一&#xff1a;net start mysql 方式二&#xff1a;在计算机管理里面手动打开数据库 2.2 登录MySQL 方式一&#xff1a;本地登录 即数据库与客户端在同一台电脑上。 方式二&#xff1a;远程登录 mysq…

ChromaDB完全指南:从核心原理到RAG实战

一、引言:拥抱AI时代的“记忆”变革 在人工智能(AI)浪潮席卷全球的今天,大型语言模型(LLM)以其强大的自然语言处理能力,正在重塑我们与信息的交互方式。然而,LLM并非万能,它们普遍存在知识截止日期、无法访问私有数据等“记忆”短板。为了突破这一瓶颈,向量数据库应…

XCUITest + Swift 详细示例

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】

Spring Boot + MyBatis + Redis Vue3 Docker + Kubernetes + Nginx

前言 前些天发现了一个巨牛的人工智能免费学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 1.1 毕设项目需求分析&#xff08;附需求文档片段&#xff09; 一、项目全景与技术选型 1.1 毕设项目需求分析&#xff08;附需…

【云计算领域数学基础】组合数学优化

一、组合数学优化 1.1、定义与本质特征 1.1.1、组合数学优化的核心原理 ​问题本质与数学工具​ ​组合爆炸问题​&#xff1a;软件输入参数、路径组合随规模指数级增长&#xff0c;如10个二值参数需1024个用例。组合数学通过覆盖数组&#xff08;Covering Array&#xff09;、…

企业文档如何变身AI语料库?无忧文档NLP+OCR技术实战解析

当企业争相采购ChatGPT、文心一言等通用大模型时&#xff0c;却忽略了&#xff1a;企业文档其实是这座数字油田的核心资产。从产品手册、客户案例到会议纪要&#xff0c;企业沉淀的海量文档&#xff0c;这些看似零散的信息&#xff0c;其实正通过AI技术被转化为可复用的“语料库…

掌握Python编程的核心能力,能快速读懂并上手项目开发。

掌握Python编程的核心能力&#xff0c;能快速读懂并上手项目开发。 一套系统且通俗的讲解&#xff0c;理论讲解 实战技巧 代码框架模板&#xff0c;让你能&#xff1a; 看懂Python项目结构 能自己写代码&#xff1a;函数、流程控制、类和模块 能写出一个完整、规范的Pytho…

「Linux文件及目录管理」硬链接与软连接

知识点解析 在Linux系统中,硬链接(Hard Link)和软链接(Symbolic Link,又称软连接)是两种不同的文件链接方式: 1.硬链接(Hard Link): 本质:硬链接是文件的一个别名,与原文件共享相同的inode和磁盘数据块。特点: 数据共享:硬链接与原文件指向同一数据块,修改任…

分清display三个属性

display 三兄弟行为对比表格 属性值是否换行能否设置宽高默认宽度常用标签典型用途block是可以撑满父容器<div>, <p>, <section>页面结构、布局容器inline否不行随内容大小<span>, <a>文字中嵌套、小图标inline-block否可以随内容大小<img&g…

《棒球青训》打造几个国家级运动基地·棒球1号位

Youth Baseball/Softball Base Development Plan | 青少年棒垒球基地建设方案 Core Strategies | 核心战略 Regional Hub Construction | 区域枢纽建设 优先在 长三角/珠三角/成渝经济圈 建设 3大示范性基地 每个基地包含&#xff1a; ▶️ 国际标准青少年赛场&#xff08;…

JavaScript Symbol 属性详解

一、Symbol 的本质与基础 1. Symbol 是什么 JavaScript 的第七种原始数据类型&#xff08;ES6 引入&#xff09;创建唯一的、不可变的标识符主要用途&#xff1a;作为对象的属性键&#xff08;Symbol 属性&#xff09; // 创建 Symbol const id Symbol(id); // id 是描述符…

使用 INFINI Console 全面管理 Elasticsearch 9.X

1、引言 在搜索和分析领域&#xff0c;保持与最新版本的 Elasticsearch 同步对于利用新功能、提升性能和增强安全性至关重要。 Elasticsearch 9.X 作为 Elastic Stack 的最新版本&#xff0c;引入了多项改进&#xff0c;例如更高效的二进制量化和对 ColPali、ColBERT 等模型的支…