虽然我这里使用CMake,但是它只是一个用于编译生成可执行文件的工具,完全不影响将工具换成g++,gcc等,这套配置是完全通用的
运行 C/C++ 文件
(或按下F5) {
"label": "CMake: Build",
"type": "shell",
"command": "cmake",
"args": ["../"],
"options": {
"cwd": "${workspaceFolder}/build"
},
"dependsOn": ["create"]
},
实现了一个完整的清除build,重新编译生成的全流程
{
"version": "2.0.0",
"tasks": [
{
"label": "clean",
"type": "shell",
"command": "rm",
"args": ["-r", "build"],
"options": {
"cwd": "${workspaceFolder}"
}
},
{
"label": "create",
"type": "shell",
"command": "mkdir",
"args": ["build"],
"options": {
"cwd": "${workspaceFolder}"
},
"dependsOn": ["clean"]
},
{
"label": "CMake: Build",
"type": "shell",
"command": "cmake",
"args": ["../"],
"options": {
"cwd": "${workspaceFolder}/build"
},
"dependsOn": ["create"]
},
{
"label": "make",
"type": "shell",
"command": "make",
"args": [],
"options": {
"cwd": "${workspaceFolder}/build"
},
"dependsOn": ["CMake: Build"] // make 依赖 CMake 生成 Makefile
},
{
"label": "build",
"dependsOn": ["clean", "create", "CMake: Build", "make"],
"dependsOrder": "sequence"
}
]
}
{
"version": "0.2.0",
"configurations": [
{
"name": "CMake Debug",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/build/bsp",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"miDebuggerPath": "/usr/bin/gdb",
"preLaunchTask": "build"
}
]
}
launch很简单,只干三件事:
name
: "CMake Debug"
作用: 调试配置的名称,显示在 VS Code 调试器下拉列表中。
type
: "cppdbg"
作用: 指定调试器类型为 C++ Debugger
request
: "launch"
作用: 表示启动一个新的程序进行调试(而非附加到已运行的进程)。
program
: "${fileDirname}/build/bsp"
作用: 指定要调试的可执行文件路径。
stopAtEntry
: false
作用: 是否在程序入口(如 main
函数)自动暂停。设为 false
表示直接运行程序。
cwd
: "${workspaceFolder}"
作用: 调试程序的工作目录,此处设为工作区根目录。影响程序的文件读写路径(如相对路径的文件访问)。
externalConsole
: false
作用: 是否在外部系统终端中运行程序。设为 false
表示使用 VS Code 内置终端。
MIMode
: "gdb"
作用: 指定底层调试器为 GDB(GNU Debugger)。
setupCommands
作用: 调试器启动时执行的初始化命令。通常我们不需要反汇编的,将自动生成的反汇编部分删除即可
text
: 向 GDB 发送 -enable-pretty-printing
命令,启用结构化数据(如 STL 容器)的友好显示。ignoreFailures
: 即使命令执行失败,也不终止调试会话。miDebuggerPath
: "/usr/bin/gdb"
作用: 显式指定 GDB 的路径。缺省时,VS Code 会从系统环境变量中查找 GDB。
preLaunchTask
: "build"
作用: 在启动调试前自动执行 tasks.json
中定义的 build
任务(如编译代码)。在上面的task.json中已经着重介绍过 build
任务了。
CMake本质就是告诉编译器如何编译(生成makefile)
无非就是用相对简单的方式,管理结构比较复杂的程序,然后在不同平台的兼容性上相对好一些,和c_cpp_properties.json几乎是一样的功能
# 设置 CMake 最低版本要求
cmake_minimum_required(VERSION 3.10)
# 设置项目名称和编程语言
project(BSP_Project C)
# 添加头文件目录
include_directories(${CMAKE_SOURCE_DIR})
# 设置可执行文件输出目录(可选)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build)
# 添加可执行文件
add_executable(bsp # 生成的可执行文件的名称
main.c # 两个用于生成可执行文件的源文件
bsp.c
)
target_include_directories(bsp PUBLIC ${CMAKE_SOURCE_DIR})
需要注意的是,生成的可执行文件名称,一定要和launch中的program对应,不然launch会找不到它