相关名词就不解释了,这里主要讲讲在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. 在Linux上显示某个进程的线程的几种方式

    方法一:PS 在ps命令中,"-T"选项可以开启线程查看.下面的命令列出了由进程号为的进程创建的所有线程. 1.$ ps -T -p 方法二: Top top命令可以实时显示各个线 ...

  2. c# 所有类型都是从object继承,那么值类型默认也有装箱吗?

    我们知道,c#所有类型都是从System.Object继承,int等值类型也逃脱不了这种命运,那难道值类型默认有装箱操作吗?答案是否,在CLR via这本书中有简短的解释说明: 1.值类型从Syste ...

  3. NameNode 和 SecondaryNameNode

    1. NN 和 2NN 工作机制 NameNode 会产生在磁盘中备份元数据的FsImage; 每当元数据有更新或者添加数据时,修改内存中的元数据并追加到Edits中; SecondaryNameNo ...

  4. Java网络编程-你是GG还是MM?

    第六阶段 网络编程 每一台计算机通过网络连接起来,达到了数据互动的效果,而网络编程所解决的问题就是如何让程序与程序之间实现数据的通讯与互动 在吗?你是GG还是MM? (一) 网络模型概述 (1) 两大 ...

  5. [转帖]Windows安全认证是如何进行的?[Kerberos篇]

    Windows安全认证是如何进行的?[Kerberos篇] NTLM 的简单看了一下 基本上了解了.. 这个KERBEROS 的看不太懂 感觉说的我也有点迷糊.. 虽然是对称加密的 但是不清不楚的.. ...

  6. SHA1签名工具类java

    package com.net.util; import java.security.MessageDigest; import java.util.Iterator; import java.uti ...

  7. 第一次安装Dev-c++编译器如何设置?Dev-c++神奇功能

    安装完Dev-c++后,我们通常会根据自己的喜好调整设置,以下是个人的做法,欢迎参考. 1.字体 字体在安装界面就可以更改.默认字体是consolas,个人喜欢下面的courier new 有些字体很 ...

  8. linux内核exec过程

    简介 本文分析linux内核exec系统调用执行过程中可执行文件的加载过程和栈的设置,内核代码版本为2.6.32 分析 \arch\ia64\kernel\process.c中有sys_exec函数的 ...

  9. volatile 关键字(修饰变量)

    目录 volatile 关键字(修饰变量) 1. 含义 2. 作用 3. 如何保证可见性 4. 如何禁止指令重排序优化 5. volatile 是不安全的 6. volatile 不适用场景 vola ...

  10. JS 验证字符串是否能转为json格式

    var isJSON=function (str) { if (typeof str == 'string') { try { var obj = JSON.parse(str); if (typeo ...