您的位置:首页 > 游戏 > 游戏 > 免费一键搭建发卡网_商务服务平台_手机网站模板_百度集团官网

免费一键搭建发卡网_商务服务平台_手机网站模板_百度集团官网

2025/3/11 2:20:50 来源:https://blog.csdn.net/m0_59475014/article/details/146079646  浏览:    关键词:免费一键搭建发卡网_商务服务平台_手机网站模板_百度集团官网
免费一键搭建发卡网_商务服务平台_手机网站模板_百度集团官网

概述

虽然我这里使用CMake,但是它只是一个用于编译生成可执行文件的工具,完全不影响将工具换成g++,gcc等,这套配置是完全通用的

  1. 右上角一键编译运行的内部流程
  2. task.json格式概述
  3. launch.json格式概述
  4. CMake格式概述
  5. 攒起来,组合成通用开发环境

一键编译运行的内部流程

  1. 点击运行 C/C++ 文件(或按下F5)
  2. vscode调用launch.json挑选调试器、根据参数配置运行环境
  3. 调用task.json生成可执行文件
  4. 启动调试器,加载用task.json生成的可执行文件
  5. 开始调试

task.json格式概述

  • 举例
		{"label": "CMake: Build","type": "shell","command": "cmake","args": ["../"],"options": {"cwd": "${workspaceFolder}/build"},"dependsOn": ["create"]},

概述

  1. task.json中,在 “tasks”: [ ] 方括号中的,每一组用 { } 括起来“东西”,都是一个task,也是这个文件真正要去执行的事
  2. 将一系列task组合起来,就可以实现一个完整的目标(有点类似于shell脚本,只不过shell以指令为单位,task.json以任务为单位)

具体变量解释

  1. “label” 表示当前任务的名称,
  2. “type” 表示当前任务的类型,不同类型对应了该任务不同的执行的方式
    • “shell”,在终端执行;
    • “process”,在一个新的进程中直接执行,常用于避免 shell 特定的行为或环境变量影响
    • “customExecution”,使用一个扩展来提供自定义的任务执行逻辑
    • “npm”,专门用于执行 npm 脚本
  3. “command” 表示执行时要使用的指令
  4. “args” 表示执行指令时要输入的参数
  5. “cwd” 表示执行该任务的目录
  6. “dependsOn” 表示该任务依赖于其他什么任务,填入需要在此之前执行完的任务名称

完整task.json

实现了一个完整的清除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"}]
}
  • 重点解释build任务
    • 相当于将之前的所有任务都攒起来,变成一个完整的处理流程,launch只需要调用这个build任务,就可以完成一次清理并重建
    • 最后一个属性"dependsOrder": “sequence”,指定了依赖任务的执行顺序。表示所有前置任务将按照它们在 “dependsOn” 数组中出现的顺序依次执行。

launch.json格式概述

{"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很简单,只干三件事:

  1. 定义如何启动调试器(GDB)
  2. 调试前的构建任务(preLaunchTask)
  3. 调试目标程序的位置

具体变量解释

  • 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格式概述

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会找不到它

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com