【vscode】Linux情况下一键编译运行c/c++步调

[复制链接]
发表于 2025-10-20 10:41:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
概述

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

  • 右上角一键编译运行的内部流程
  • task.json格式概述
  • launch.json格式概述
  • CMake格式概述
  • 攒起来,组合成通用开辟情况
一键编译运行的内部流程


  • 点击运行 C/C++ 文件(或按下F5)
  • vscode调用launch.json挑选调试器、根据参数设置运行情况
  • 调用task.json天生可实行文件
  • 启动调试器,加载用task.json天生的可实行文件
  • 开始调试
task.json格式概述


  • 举例
  1.                 {
  2.             "label": "CMake: Build",
  3.             "type": "shell",
  4.             "command": "cmake",
  5.             "args": ["../"],
  6.             "options": {
  7.                 "cwd": "${workspaceFolder}/build"
  8.             },
  9.             "dependsOn": ["create"]
  10.         },
复制代码
概述


  • task.json中,在 “tasks”: [ ] 方括号中的,每一组用 { } 括起来“东西”,都是一个task,也是这个文件真正要去实行的事
  • 将一系列task组合起来,就可以实现一个完备的目标(有点类似于shell脚本,只不外shell以指令为单元,task.json以使命为单元)
详细变量表明


  • “label” 表现当前使命的名称,
  • “type” 表现当前使命的范例,差别范例对应了该使命差别的实行的方式

    • “shell”,在终端实行;
    • “process”,在一个新的历程中直接实行,常用于克制 shell 特定的举动或情况变量影响
    • “customExecution”,使用一个扩展来提供自界说的使命实行逻辑
    • “npm”,专门用于实行 npm 脚本

  • “command” 表现实行时要使用的指令
  • “args” 表现实行指令时要输入的参数
  • “cwd” 表现实行该使命的目次
  • “dependsOn” 表现该使命依靠于其他什么使命,填入必要在此之前实行完的使命名称
完备task.json

实现了一个完备的打扫build,重新编译天生的全流程
  1. {
  2.     "version": "2.0.0",
  3.     "tasks": [
  4.         {
  5.             "label": "clean",
  6.             "type": "shell",
  7.             "command": "rm",
  8.             "args": ["-r", "build"],
  9.             "options": {
  10.                 "cwd": "${workspaceFolder}"
  11.             }
  12.         },
  13.         {
  14.             "label": "create",
  15.             "type": "shell",
  16.             "command": "mkdir",
  17.             "args": ["build"],
  18.             "options": {
  19.                 "cwd": "${workspaceFolder}"
  20.             },
  21.             "dependsOn": ["clean"]
  22.         },
  23.         {
  24.             "label": "CMake: Build",
  25.             "type": "shell",
  26.             "command": "cmake",
  27.             "args": ["../"],
  28.             "options": {
  29.                 "cwd": "${workspaceFolder}/build"
  30.             },
  31.             "dependsOn": ["create"]
  32.         },
  33.         {
  34.             "label": "make",
  35.             "type": "shell",
  36.             "command": "make",
  37.             "args": [],
  38.             "options": {
  39.                 "cwd": "${workspaceFolder}/build"
  40.             },
  41.             "dependsOn": ["CMake: Build"]  // make 依赖 CMake 生成 Makefile
  42.         },
  43.         {
  44.             "label": "build",
  45.             "dependsOn": ["clean", "create", "CMake: Build", "make"],
  46.             "dependsOrder": "sequence"
  47.         }
  48.     ]
  49. }
复制代码

  • 重点表明build使命

    • 相称于将之前的全部使命都攒起来,变成一个完备的处置处罚流程,launch只必要调用这个build使命,就可以完成一次整理并重修
    • 末了一个属性"dependsOrder": “sequence”,指定了依靠使命的实行序次。表现全部前置使命将按照它们在 “dependsOn” 数组中出现的序次依次实行。

launch.json格式概述
  1. {
  2.     "version": "0.2.0",
  3.     "configurations": [
  4.         {
  5.             "name": "CMake Debug",
  6.             "type": "cppdbg",
  7.             "request": "launch",
  8.             "program": "${fileDirname}/build/bsp",
  9.             "args": [],
  10.             "stopAtEntry": false,
  11.             "cwd": "${workspaceFolder}",
  12.             "environment": [],
  13.             "externalConsole": false,
  14.             "MIMode": "gdb",
  15.             "setupCommands": [
  16.                 {
  17.                     "description": "Enable pretty-printing for gdb",
  18.                     "text": "-enable-pretty-printing",
  19.                     "ignoreFailures": true
  20.                 }
  21.             ],
  22.             "miDebuggerPath": "/usr/bin/gdb",
  23.             "preLaunchTask": "build"
  24.         }
  25.     ]
  26. }
复制代码
概述

launch很简单,只干三件事:

  • 界说怎样启动调试器(GDB)
  • 调试前的构建使命(preLaunchTask)
  • 调试目标步调的位置
详细变量表明


  • 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险些是一样的功能
  1. # 设置 CMake 最低版本要求
  2. cmake_minimum_required(VERSION 3.10)
  3. # 设置项目名称和编程语言
  4. project(BSP_Project C)
  5. # 添加头文件目录
  6. include_directories(${CMAKE_SOURCE_DIR})
  7. # 设置可执行文件输出目录(可选)
  8. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build)
  9. # 添加可执行文件
  10. add_executable(bsp                 # 生成的可执行文件的名称
  11.     main.c                                 # 两个用于生成可执行文件的源文件
  12.     bsp.c
  13. )
  14. target_include_directories(bsp PUBLIC ${CMAKE_SOURCE_DIR})
复制代码
必要留意的是,天生的可实行文件名称,肯定要和launch中的program对应,否则launch会找不到它

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表