相关名词就不解释了,这里主要讲讲在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 $ -g -o build/$ -lavformat -lavcodec -lavutil -lSDl2main -lSDL2

[原创]在Windows平台使用msys2、mingw64和vscode编写和调试C/C++代码的更多相关文章

  1. [原创]在Windows平台使用msvc(cl.exe) + vscode编写和调试C/C++代码

    1.在.vscode目录下,新建以下几个配置文件,当然也可以通过vscode命令自动生成,如果你已有这些文件直接修改即可. c_cpp_properties.json(代码提示): { "c ...

  2. 【原创】Windows平台搭建Kafka源代码开发环境(Eclipse版本)

    最近在研究Kafka源代码,需要自己搭建一个开发环境.官网上给出的提示略显简单,照着做了一遍也碰到了一些问题.特此记录下来. 开发环境: Oracle Java 1.7_u71 + Eclipse 4 ...

  3. 亲试,Windows平台上使用Qt5.2.1编写Android

    首先把工具都下载好: 1. Qt for Android: http://qt-project.org/downloads 2. Android NDK http://developer.androi ...

  4. Windows平台Unity3d播放多路RTMP或RTSP流

    好多开发者在做AR.VR或者教育类产品时,苦于如何在windows平台构建一个稳定且低延迟的RTSP或者RTMP播放器,如果基于Unity3d完全重新开发一个播放器,代价大.而且周期长,不适合快速出产 ...

  5. Windows平台下使用vs code搭建python3环境(1)

    前言:最近几周在使用python开发的过程中,碰到了好多坑,由于以前使用visual studio 2015习惯了,导致刚开始搭建python开发环境以及管理各种包的时候有点不习惯,再加上python ...

  6. Windows平台Oracle使用USE_SHARED_SOCKET角色

    前两天在一个朋友QQ集团提出了一个问题.背景例如,下面的: 继续问后,有例如以下回复: 1.对方server连接无问题. 2.从client能够telnetserver的1521port. 3.tns ...

  7. Windows平台下解决Oracle12c使用PDB数据库创建SDE的问题 分类: oracle sde 2015-06-12 11:03 88人阅读 评论(0) 收藏

    Windows平台下解决Oracle12c使用PDB数据库创建SDE的问题 Oracle 12C中引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant ...

  8. Domino系统从UNIX平台到windows平台的迁移及备份

    单位机房的一台服务机器到折旧期了,换成了新购IBM机器X3950,而且都预装了windows 2003 server 标准版,所以只有把以前在Unix平台下跑的OA系统迁移到新的windows 200 ...

  9. Cocos2d-x在Windows平台环境的搭建

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. windows平台下配置Cocos2d-X引擎所需的压缩文件和可执行文件,如下: 下载链接: adt:    http://tools.a ...

随机推荐

  1. 冲刺Noip2017模拟赛7 解题报告——五十岚芒果酱

    1.二叉树(binary) .二叉树 (binary.cpp/c/pas) [问题描述] 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: ()若左子树不空,则左子树上所有结点的值均小于它的根结 ...

  2. docker安装mongodb和redis

    一.安装mongodb docker pull mongo docker run -p 27017:27017 -d --name mongodb01 mongo docker run -p 2701 ...

  3. 操作MySQL数据进行记录的随意排序

    说到排序,想必大家都知道MySQL中的“ORDER BY”这个关键词吧,使用它可以实现查询数据根据某一字段(或多个字段)的值排序,那么如何实现数据的任意排序操作呢? 其实这里我所说的“随意排序”,本质 ...

  4. elasticsearch进行远程访问,所面对的问题解决方案

    elasticsearch6.2进行远程访问,修改yml文件后,启动会报错: 上面四个问题解决方案如下: 问题1,问题2,问题3,解决如下: 注意: 针对第二个问题,你可能在limits.d目录中没有 ...

  5. Python 闭包、迭代器、生成器、装饰器

    Python 闭包.迭代器.生成器.装饰器 一.闭包 闭包:闭包就是内层函数对外层函数局部变量的引用. def func(): a = "哈哈" def func2(): prin ...

  6. k8s组件通信或者创建pod生命周期

    Kubernetes 多组件之间的通信原理: apiserver 负责 etcd 存储的所有操作,且只有 apiserver 才直接操作 etcd 集群 apiserver 对内(集群中的其他组件)和 ...

  7. eclipse导入maven空项目,eclipse导入时不识别maven项目

    经常我们在网上下载的一些开源项目中,想要导入eclipse中,却发现eclipse不识别这个项目,这时候怎么办呢? 解决办法多种多样,我这里举例出最实用的2种: 1.在项目的根目录中加入.classp ...

  8. 基于bootstrap selectpicker ,实现select下拉框模糊查询功能

    1.html代码块 需要引入bootstrap的css js jquery bootstrap.css bootstrap-select.min.css jquery-1.11.3.min.js bo ...

  9. C++反汇编第一讲,不同作用域下的构造和析构的识别

    目录大纲: 1.全局(静态)对象的识别,(全局静态全局一样的,都是编译期间检查,所以当做全局对象看即可.) 1.1 探究本质,理解构造和析构的生成,以及调用方式(重要,如果不想知道,可以看总结.) 2 ...

  10. hdu 1502 大数dp

    对于每一个dp的问题 从其最优解的结构(分哪几种形式或者情况)入手 然后分析状态 这样就比较好找出状态转方程这里数据结构的选择很简单 顺序数组就可以 填充的方式顺序填充就可以 然后这道题目卡了我大数. ...