当前位置: 首页 > news >正文

关于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",},]
}

相关文章:

  • Self-supervised Learning(BERT/GPT/T5)
  • Mac中Docker Desktop无法使用,可使用OrbStack
  • 前端页面Javascript数组
  • 25.Hybrid+安卓项目调试方法
  • Java素数筛法:BitSieve类的精妙设计
  • 【无标题】对拓扑对偶框架关键质疑的深度解答
  • 【Java学习笔记】线程基础
  • 【Dify 案例】【自然语言转SQL案例】【五】【实战二】【财务管理查询商品信息数据】
  • 有哪些东西东西时间越长越值钱?做哪些事时间越长越值钱?伪长期增值陷阱​ 打造财富复利成长策略
  • 第十三章 模板
  • Spring Aop @AfterThrowing (异常通知): 使用场景
  • Cesium、ThreeWebGL详解(二)渲染引擎向GPU传数据、性能优化、引擎对比
  • 无人机测量风速的思路
  • 解决uni-app发布微信小程序主包大小限制为<2M的问题
  • 宽带中频10.4G采集卡
  • 类图:软件世界的“建筑蓝图”
  • NestJS中实现动态Cron任务管理
  • Babylon.js学习之路《十、高级几何体:自定义模型与复杂形状生成》
  • Tkinter基础函数知识点整理
  • SAM2论文解读-既实现了视频的分割一切,又比图像的分割一切SAM更快更好
  • 做预约的网站/软文写作经验
  • 漳州专业做网站/推广引流渠道有哪些
  • 进网站备案时间/旺道seo网站优化大师
  • 优化网站设计有哪些方法/温州seo外包公司
  • 成都模版网站制作/怎么找网站
  • 做聊天网站的视频教程/百度竞价排名广告定价鲜花