首页 > 编程语言 >【环境配置】vscode配置C C++开发和调试环境

【环境配置】vscode配置C C++开发和调试环境

时间:2023-12-31 17:22:22浏览次数:33  
标签:插件 msys2 cmake vscode pacman 配置 C++ 调试

【环境配置】vscode配置C C++开发和调试环境

首先区分一些基本概念,其中部分内容可能有所出入,同时本文截至2023/12/31,更多的详细区别,请查阅官方文档

  • MinGW,Minimalist GNU for Windows,前身为mingw32,是一个用于创建Microsoft Windows应用程序的免费开源软件开发环境。包括GNU编译器套件,以及windows的特定头文件,不依赖第三方C运行时动态链接库,仅能生成32位可执行文件,更新缓慢。
  • MinGW-w64,同MinGW,但是支持64位,更新及时,但官方没有发布预构建二进制文件,相当于是cygwin,winlib,msys2等一众发行版的上游。
  • Cygwin,把unix环境下的常见工具移植到windows平台使用,有一个posix系统调用兼容层cygwin1.dll,支持的开发包比较多,但是不够精简
  • msys,同Cygwin,但是更精简,也是m的由来(minimal),不过更新缓慢
  • msys2,同msys,精简,环境多,支持的工具链多,维护很及时,内置pacman包管理器
  • wsl,可以理解为一个完备的linux环境,而非通过posix兼容层来实现,基于hyper-V

以上内容可能比较模糊,太细致的内容,我也不想去查证了,比较费时间,不过去了解也是很不错的。

TL,DR:直接使用msys2进行开发,更新及时,还有包管理器,有很多预构建prebuilt的二进制包,包括qt,openssl,opencv,boost等,省去了很多包管理的麻烦,同时支持替换镜像源,相比较vcpkg这个工具,省心太多了

不过,刚开始使用msys2,可能会觉得这个软件比较复杂,毕竟看到这么多个可用的环境,刚入门也是会云里雾里img

以下简单介绍这几个环境的区别,更多的内容可以查阅官方文档

msys2支持以下几种环境
img
几个环境之间的主要区别包括 environment variables, default compilers/linkers, architecture, system libraries used
如果不确定用哪个,那么就默认使用UCRT即可,MSYS需要搭配一个dll发布软件,UCRT则是不需要的,是可以独立运行的,且基于更新的C库UCRT,全称是Universal C Runtime,这个运行时与MSVC有更好的兼容性,支持utf8文件路径,在win10上默认搭载,更老的版本需要自己提供这个运行时。MINGW64也可以独立运行,但是使用的C库是msvcrt,兼容性更好,性能弱于ucrt.

msys2的安装与配置

msys2的安装比较简单,默认安装路径为C:\msys64,这个路径可以不用修改,因为vscode的cmake tools插件会自动扫描到这个路径,就不用手动添加这个工具链

pacman的一些常用命令

命令 描述
pacman -S <package_name> 从官方软件仓库安装软件包
pacman -Ss <search_term> 在软件仓库中搜索软件包
pacman -R <package_name> 从系统中移除软件包
pacman -Syu 升级所有已安装的软件包
pacman -Q 列出已安装的软件包
pacman -Sc 清理软件包缓存

pacman配置清华镜像源

sed -i "s#https\?://mirror.msys2.org/#https://mirrors.tuna.tsinghua.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*

该命令会把 /etc/pacman.d/mirrorlist* 文件中的msys2的源修改为清华源,下载速度更快
img

pacman安装开发工具链(以下均使用UCRT64环境进行安装)

pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

上面两个包含gcc和gdb以及make工具,我们还需要cmake来自动生成MakeFile

pacman -S mingw-w64-ucrt-x86_64-cmake

img
发现连带着把Ninja也一并安装了,没记错应该是把Ninja作为默认构建工具了(不确定)。

到目前为止,成功安装了C/C++的编译器开发套件和cmake构建工具(cmake,make,ninja的区别另外找文章看吧,此处不赘述)。如果你对vim和emacs使用熟练,已经可以开始写代码并通过命令行构建和调试了。

msys2的大部分包都是以mingw-w64+环境+包名命名的,所以很多时候,安装包之前,可以先用pacman -Ss <package>来获取完整的包名

你可以选择把MSYS2 UCRT64集成到Windows Terminal和vscode的终端里,这一部分内容,可以参考terminalsIDES and Text Editors,这两个配置都是比较简单的,而且集成之后更加方便。

vscode的配置

vscode的安装就不详细展开了,主要用到四个插件

img

  • C/C++ 是微软出品,用于代码智能提示和跳转, 高亮,代码格式化,以及调试,同时不需要依赖于compile_commands.json文件,不过速度很慢,同时提示信息不够全面,所以这个插件仅用来支持调试,我一般把它的代码提示功能关闭(因为和clangd的代码提示功能相冲突)
    img

  • clangd 是llvm项目下的LSP服务器,另外还有一款叫ccls的(不太了解),这个插件需要搭配clangd使用,依旧使用MSYS2的UCRT64环境下进行安装,具体命令见下图
    img

clangd作为代码提示引擎,其性能是比C/C++要好的,但是不支持调试,有另一个CodeLLDB插件支持LLDB作为调试,但是我自己用来没有C/C++方便,因为CMake Tools插件可以和C/C++搭配直接调试,无需写tasks.json或者launch.json文件

你还需要把以下配置添加到vscode的settings.json文件中

"clangd.detectExtensionConflicts": false,

这样clangd就不会一直弹窗提示和C/C++插件冲突了

  • CMake 不需要进行额外的配置,直接安装即可,这个插件能够方便CMakeLists.txt文件的编写,比如语法高亮,提示,格式化等
  • CMake Tools 这个插件是实际调用cmake去执行命令的,我们需要告诉他,cmake的路径(若cmake未加入PATH环境变量)
"cmake.cmakePath": "C:/msys64/ucrt64/bin/cmake.exe"

测试环境

接下来可以快速写一个helloworld项目进行测试,打开一个全新的目录,
ctrl+shit+p 调出面板,输入cmake,选择quickstart
img
输入项目名称
img
选择类型 C 或者 C++项目
img
开发可执行文件 还是 库文件
img
cmake tools自动为我们创建了main.cpp和CMakeLists.txt文件

img

可以直接双击下方状态栏运行和调试按钮
运行:
img
调试:
img

可以看到,非常的方便,再也不用去写哪些tasks.json和launch.json文件了

标签:插件,msys2,cmake,vscode,pacman,配置,C++,调试
From: https://www.cnblogs.com/ericling0529/p/17937769

相关文章

  • Web服务器启用HTTPS的配置方法
    本文于2016年3月完成,发布在个人博客网站上。考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。nginx的配置方法可以参考JerryQu的本博客Nginx配置之完整篇。Tomcat的配置方法以Java语言实现的Connector为例,介绍配置方法。创建证书Windows......
  • TDSQL(PG版本)天巡系统安装与配置
    参考文档:https://doc.weixin.qq.com/doc/w3_AFwAeQZ3ACcJA0Z3mpITzyrQuymvJ?scode=AJEAIQdfAAoexq79g0AFwAeQZ3ACc安装前准备:1、需要下载安装包,包括:tbase-update.zip;2、天巡可以安装在虚拟机上面;3、需要提前确认如下信息:LTC编码(安灯局点库)tbase的jid:局点idtdmq的jid:局点id一、......
  • vscode调试
           1{2//使用IntelliSense了解相关属性。3//悬停以查看现有属性的描述。4//欲了解更多信息,请访问:https://go.microsoft.com/fwlink/?linkid=8303875"version":"0.2.0",6"configurations":[7{8......
  • Tdsql(mysql版本)TMT安装与配置
    详细步骤参考“Tdsql-Migration-Tools使用文档v1.0.4--20231007”文档,安装步骤及软件包见百度网盘一、开通防火墙(proxy和set的都申请上):1、确定实例;XXX---实例名2、oracle实例端口:IP地址,端口为:15213、tdsql实例的proxy端口和set端口:DB地址及端口:10.xx.yy.z1:4010主10.xx.yy.z2:......
  • Spring Boot2.x 集成 OpenFeign 实现 Hystrix 熔断降级与 Ribbon 负载均衡配置
    参考https://blog.csdn.net/zhangchaoyang/article/details/123453616https://blog.csdn.net/u010277958/article/details/88744263https://blog.csdn.net/iwlnner/article/details/110090595https://cloud.tencent.com/developer/article/2225692https://blog.csdn.net/z......
  • C++ opencv检测圆
     #include<opencv2/opencv.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>#include<iostream>usingnamespacecv;usingnamespacestd;intmain(intargc,char**argv){//读取图像Matsrc......
  • C++U3-第07课-模拟枚举
    学习目标 枚举算法意思示例枚举重点[【模拟枚举】水仙花数]  【题意分析】我们需要找出区间内所有的水仙花数【思路分析】用for循环的方式去判断从100到999的每一个数将当前的数个位、十位、百位求出判断每一位的数的次方之和是否等于本身【参考代码】......
  • C++STL常用容器deque以及常用接口
    2.1deque容器2.1.1deque容器基本概念功能:双端队列容器,可以对头端进行插入删除操作deque与vector区别:vector对于头部的插入删除效率低,数据量越大,效率越低deque相对而言,对头部的插入删除速度回比vector快vector访问元素时的速度会比deque快,这和两者内部实现有关deque内部工作原理:......
  • jenkins 配置注意事项
    1、需要配置ssh服务器的时候,源文件为target/xxx.jar2、删除头信息用target3、远程服务器ssh中的目录填写绝对地址,例如:/home/test/xxx4、执行的sh也要写绝对地址,且用nohupbash/home/test/xxx.sh启动5、远程服务器上用xxx.sh里面的所有文件地址一律绝对地址6、需要......
  • 我是怎么从0开始,开发一款VSCode插件
    在当今的软件开发世界中,VisualStudioCode(VSCode)已经成为了一个非常流行的代码编辑器。其强大的扩展性和定制性,使得开发者们可以轻松地为其添加各种功能。作为一名热衷于编程和插件开发的开发者,我深受VSCode的启发,决定从零开始开发一款属于自己的VSCode插件。一、确定需求在开始开......