基于VSCode的C++环境搭建及多文件编译

声明:本文参考自b站《手把手教会VSCode的C++环境搭建,多文件编译,Cmake,json调试配置( Windows篇)》:https://b23.tv/HiWjVl

更多精彩:《基于VSCode和CMake实现C/C++开发 | Linux篇》
https://www.bilibili.com/video/BV1fy4y1b7TC

总体认识

vscode中有两个配置文件非常关键,launch.json、tasks.json,要想理解这两个文件的作用,首先需要理解

  • 一个C++是如何被编译的;
  • 如何用CMake构建多文件大型程序。

launch.json是调试运行一个已经编译好的程序,而调试运行的前提是编译整个项目,这正是tasks.json的任务,tasks.json调用CMake命令才能编译多文件项目,下面具体来看

实操演练

  • 基于 g++ 命令

    • g++编译文件,生成带调试信息的可执行文件
    g++ -g main.cpp -o my_single_swap
    # -g 生成带调试信息的可执行文件
    # -o 指定生成可执行文件的名字
    
    • g++编译文件,生成带调试信息的可执行文件
    g++ -g main.cpp swap.cpp -o my_multi_swap
    # -g 生成带调试信息的可执行文件
    # -o 指定生成可执行文件的名字
    
  • 基于CMake

    • 编写最简单的CMakeLists.txt

      # 指定Cmake工程名
      project(MYSWAP)
      # 编译main.cpp swap.cpp,生成my_cmake_swap.exe的可执行文件
      add_executable(my_cmake_swap main.cpp swap.cpp)
      
    • 进行多文件编译,并调试

      # 新建build文件夹
      mkdir build
      # 进入到build目录
      cd build
      # 如果电脑上已安装了VS,可能会调用微软MSVC编译器,
      # 使用(cmake -G "MinGW Makefiles" ..) 代替(cmake ..)
      # 仅第一次使用cmake时使用(cmake -G "MinGW Makefiles" ..),后面可使用(cmake ..)
      
      # cmake编译上级目录
      cmake .. 
      # 执行windows下的make指令
      mingw32-make.exe
      

配置json文件

  • launch.json ---- for debug

    • 作用:配置调试信息,用来调试编译好的程序
    • program:可执行文件的路径
    • preLaunchTask:执行调试前所执行的task
  • tasks.json ---- for build before debug

    • 作用:包含调试前的操作指令,用来做调试前的编译工作 (操作指令都是为编译服务的)
    1. 可以避免每次修改代码后,手动编译;即tasks.json其实是和 手动编译 的作用等价的
    2. tasks.json某个task包含了编译命令: 编译代码,并生成可执行文件
    3. tasks.json中的这个task的label 应与launch.json中的preLaunchTask名字一致

图片

下面列出CMake工程的tasks.json:

{   
    "version": "2.0.0",
    "options": {
        "cwd": "${workspaceFolder}/build" // "cwd"表示当前工作目录:current working directory
    },
    "tasks": [
        {
            "type": "shell",
            "label": "cmake", // 该任务的标签是:"cmake"
            "command": "cmake", // cmake任务生成makefile文件
            "args": [ // cmake命令后所跟的参数,".."表示在父目录
                ".."
            ]
        },
        {
            "label": "make", // 该任务的标签是:"label",根据makefile文件进行编译
            "group": {
                "kind": "build", // 当前任务所属的组是build组
                "isDefault": true 
            },
            "command": "mingw32-make.exe", // 在Windows下实际执行的命令是:mingw32-make
            "args": [ // mingw32-make命令后面所跟的参数
            ]
        },
        {
            "label": "Build", //这个名为"Build"的task是launch.json执行前所预先执行的任务
            "dependsOn":[ // 并且这个任务又依赖"cmake"和"make"这两个任务
                "cmake",
                "make"
            ]
        }
    ],
}

下面是launch.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": "g++.exe - 生成和调试活动文件", // 名字随便
            "type": "cppdbg",
            "request": "launch", // 这个是启动任务,不是附加任务
            "program": "${workspaceFolder}\\build\\my_cmake_swap.exe", // 要执行的可执行文件的路径
            "args": [], // 该可执行文件执行时后面跟随的参数
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}", // 表示当前的工作目录在哪里
            "environment": [],
            "externalConsole": false, // 是否使用外部控制台
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\Environment\\mingw64\\bin\\gdb.exe", // debugger的路径
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "Build" // 该任务启动前预先执行的任务,即编译任务
        }
    ]
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值