關于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
英文地址,請注明出處:http://en.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 等模型的支…