如何才能使CMake生成的可执行程序便于调试呢?

本文介绍了如何通过修改CMakeLists.txt文件设置,使CMake构建的可执行程序便于调试。关键步骤包括设置CMAKE_CXX_FLAGS_DEBUG以包含调试信息,设置CMAKE_BUILD_TYPE为Debug,使用ccmake配置并生成Makefile,最后通过gdb进行调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何才能使CMake生成的可执行程序便于调试呢?


一。
在工程目录下的CMakeLists.txt中加入如下两行代码:
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") 
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") 
如我写的一个例子:
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")#就是这两行东东
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")#


PROJECT(PRO_TEST)
ADD_SUBDIRECTORY(book)
ADD_SUBDIRECTORY(desk)
INCLUDE_DIRECTORIES(./book/incl ./desk/incl)
AUX_SOURCE_DIRECTORY(. SRCS)
ADD_EXECUTABLE(main ${SRCS})
TARGET_LINK_LIBRARIES(main book)
TARGET_LINK_LIBRARIES(main desk)


二。
再正常地cmake
如   cmake ..


三。
ccmake ..
进入图形界面将变量 CMAKE_BUILD_TYPE 设置为 Debug ,
按 "c" 进行 configure  ,按  "g"  生成 Makefile  并退出。


四。
make 


五。
gdb main
随便调试都可以,list 都可以用,不过要注意要进入某个类的函数
要使用如 b Book::book_say  这种格式。



### 配置 Linux 下 VSCode 使用 CMake 进行 C++ 调试 在 Linux 环境下,使用 Visual Studio Code (VSCode) 结合 CMake 工具链来开发和调试 C++ 程序是一种高效的解决方案。以下是关于如何配置此环境的具体说明。 #### 创建项目结构 为了更好地管理和构建项目,通常会采用以下目录结构[^3]: - `include`: 存放头文件 (.h 文件)。 - `src`: 存放源代码文件 (.cpp 文件)。 - `build`: 作为 CMake 构建输出的临时目录。 - `CMakeLists.txt`: 定义项目的依赖关系、目标以及编译选项。 #### 安装必要的工具 确保已安装以下软件包: 1. **Visual Studio Code**: 可以从官方仓库或者官网下载并安装。 2. **C/C++ 扩展插件**: 在 VSCode 中安装 Microsoft 提供的 C/C++ 插件。 3. **g++ 编译器**: 用于实际编写的 C++ 源码编译。 4. **GDB 调试器**: 支持断点设置和其他调试功能。 5. **CMake**: 自动化生成 Makefile 或其他平台特定的构建脚本。 #### 设置 launch.json 和 tasks.json 要实现有效的调试体验,需正确配置两个重要 JSON 文件: ##### 1. `tasks.json` - 定义构建任务 ```json { "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "cmake --build ./build --config Debug" } ] } ``` 上述命令会在指定的 build 目录中调用 cmake 来完成整个项目的构建工作,并且指定了调试模式下的优化级别以便于后续分析[^2]。 ##### 2. `launch.json` - 配置启动参数 ```json { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/main", // 替换为目标可执行文件路径 "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "build" } ] } ``` 这里设置了当点击运行按钮时自动触发前面定义好的构建任务(preLaunchTask),同时加载 GDB 并指向最终生成的应用程序二进制位置进行逐步跟踪或变量观察等活动[^1]。 需要注意的是如果遇到某些情况下即使成功完成了所有前期准备工作仍然会出现找不到对应源文件的情况,则可能是因为缓存问题所致;此时可以选择按照提示忽略警告继续操作即可[^4]。 ### 总结 综上所述,在 Linux 平台上利用 VSCode 实现带有复杂依赖项管理需求的大规模现代风格 C++ 应用程序开发流程变得异常简便快捷。只需合理规划好初始阶段的各项准备事项之后就可以享受无缝衔接带来的便利之处了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值