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

CMakeLists.txt的编写

顶层目录的CMakelists.txt

  1. 目录:./CMakeLists.txt
bash 复制代码
#./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

bash 复制代码
# ./utils/CMakeLists.txt
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)

# 生成链接库
add_library (utils ${DIR_LIB_SRCS})

./lib/CMakeLists.txt

bash 复制代码
#./lib/CMakeLists.txt

add_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

bash 复制代码
#./lib/src/CMakeLists.txt
add_subdirectory(phy)

./lib/src/phy/CMakeLists.txt

bash 复制代码
#./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

bash 复制代码
# .\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

bash 复制代码
# .\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}"等价于
json 复制代码
{
    "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

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",
        },
    ]
}
相关推荐
花小璇学linux2 小时前
imx6ull-驱动开发篇42——Linux I2C 驱动框架简介
linux·驱动开发·嵌入式软件
凌肖战2 小时前
编写Linux下设备驱动时两种方案:内核态驱动开发和用户态驱动开发
linux·驱动开发
奇某人4 小时前
【语法】【C+V】本身常用图表类型用法快查【CSDN不支持,VSCODE可用】
开发语言·vscode·markdown·mermaid
Wy_编程5 小时前
VS中创建Linux项目
linux
luck_lin5 小时前
linux添加新硬盘挂载分区和数据迁移
linux·运维·分区扩容
secondyoung5 小时前
一文丝滑使用Markdown:从写作、绘图到转换为Word与PPT
开发语言·vscode·编辑器·powerpoint·markdown·visual studio·mermaid
iFulling5 小时前
【云原生】CentOS安装Kubernetes+Jenkins
linux·云原生·kubernetes·centos·jenkins
喜欢你,还有大家7 小时前
Linux笔记10——shell编程基础-4
linux·运维·服务器·笔记
不懂机器人7 小时前
linux编程----网络通信(TCP)
linux·服务器·tcp/ip
tanyongxi668 小时前
简易shell
linux·运维·服务器