zoukankan      html  css  js  c++  java
  • [原创]在Windows平台使用msys2、mingw64和vscode编写和调试C/C++代码

    相关名词就不解释了,这里主要讲讲在vscode里怎么配,这里假设大家相关工具已经装好。

    题外话:里面的大多数坑都是windows平台和linux平台的差异造成的,如果在linux平台配置,应该会顺利很多。

    1、在.vscode目录下,新建以下几个配置文件,当然也可以通过vscode命令自动生成,如果你已有这些文件直接修改即可。

    c_cpp_properties.json(代码提示):

    {
      "configurations": [
        {
          "name": "Win32",
          "windowsSdkVersion": "10.0.18362.0",
          "compilerPath": "${env:MSYS2}/mingw64/bin/gcc",
          "includePath": ["${env:MSYS2}/mingw64/include"],
          "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
          "intelliSenseMode": "gcc-x64"
        }
      ],
      "version": 4
    }

    tasks.json(编译):

    {
      "tasks": [
        {
          "type": "shell",
          // 标示名
          "label": "build",
          // 要执行的命令,这里用了一个脚本来构建
          "command": "./build.sh",
          // 命令参数
          "args": ["${fileBasename}", "${fileBasenameNoExtension}.exe"],
          "group": {
            "kind": "build",
            "isDefault": true
          },
          "problemMatcher": "$gcc"
        }
      ],
      "version": "2.0.0"
    }

    launch.json(调试):

    {
      // 使用 IntelliSense 了解相关属性。
      // 悬停以查看现有属性的描述。
      // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
      "version": "0.2.0",
      "configurations": [
        {
          "name": "gdb",
          "type": "cppdbg",
          "request": "launch",
          // 要调试的程序
          "program": "${workspaceFolder}/build/${fileBasenameNoExtension}.exe",
          // 程序运行参数
          "args": ["./video/sample.mp4"],
          // 是否在入口自动断点
          "stopAtEntry": false,
          // 工作目录
          "cwd": "${workspaceFolder}",
          "environment": [],
          "externalConsole": true,
          "MIMode": "gdb",
          "miDebuggerPath": "gdb.exe",
          // 先编译,再调试,对应tasks.json中的标示
          "preLaunchTask": "build",
          "setupCommands": [
            {
              "description": "Enable pretty-printing for gdb",
              "text": "-enable-pretty-printing",
              "ignoreFailures": true
            }
          ]
        }
      ]
    }

    这里需要特别关注的一点是externalConsole要设置成true,只能另开一个控制台调试,因为在原来的bash环境下无法执行windows的调试连接器。

    settings.json(vscode终端配置):

    {
      "editor.formatOnSave": true,
      // 要使用cmd终端,其他终端会有兼容问题
      "terminal.integrated.shell.windows": "${env:MSYS2}/usr/bin/bash.exe",
      "terminal.integrated.shellArgs.windows": ["--login"],
      "terminal.integrated.env.windows": {
        "MSYSTEM": "MINGW64",
        "CONTITLE": "MinGW x64",
        "C_INCLUDE_PATH": "/mingw64/include",
        "CPLUS_INCLUDE_PATH": "/mingw64/include"
      }
    }

    这个配置需要重点说下:

    首先终端必须设置为bash.exe,这个被硬编码到了vscode的代码中,他会根据这个识别相关的参数配置。

    其次,参数中需要加入"--login",这个配置了才能正常使用linux下的命令,比如ls之类的。

    然后,环境参数需要手动设置一下,MSYSTEM和CONTITLE是给msys2使用的,让他识别出要使用的平台是mingw64(后面那个估计只是title,做展示用的而已),这两个参数是从他的bat脚本里面抠出来的。

    C_INCLUDE_PATH和CPLUS_INCLUDE_PATH是设置gcc编译使用的头文件寻找路径,msys2好像没有自动配置这个,我们这里手动加下,这样mingw64目录下的include就可以被gcc识别了。

    2、在根目录下创建构建脚本 

     build.sh(构建脚本,可根据需要自行更改):

    #!/bin/sh
    
    # 创建build目录
    if [ ! -d "build" ]; then
        mkdir build
    fi
    
    gcc $1 -g -o build/$2 -lavformat -lavcodec -lavutil -lSDl2main -lSDL2
  • 相关阅读:
    jquery
    模板库
    Luogu P1902 刺杀大使
    8.20模拟赛再次观光记
    Luogu P1122 最大子树和
    Luogu P1470 最长前缀 Longest Prefix
    8.18爆炸记
    Luogu P1388 算式
    Luogu P1103 书本整理
    8.17
  • 原文地址:https://www.cnblogs.com/DarkMaster/p/11960489.html
Copyright © 2011-2022 走看看