【环境配置】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,可能会觉得这个软件比较复杂,毕竟看到这么多个可用的环境,刚入门也是会云里雾里
以下简单介绍这几个环境的区别,更多的内容可以查阅官方文档
msys2支持以下几种环境
几个环境之间的主要区别包括 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的源修改为清华源,下载速度更快
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
发现连带着把Ninja也一并安装了,没记错应该是把Ninja作为默认构建工具了(不确定)。
到目前为止,成功安装了C/C++的编译器开发套件和cmake构建工具(cmake,make,ninja的区别另外找文章看吧,此处不赘述)。如果你对vim和emacs使用熟练,已经可以开始写代码并通过命令行构建和调试了。
msys2的大部分包都是以mingw-w64+环境+包名命名的,所以很多时候,安装包之前,可以先用pacman -Ss <package>
来获取完整的包名
你可以选择把MSYS2 UCRT64集成到Windows Terminal和vscode的终端里,这一部分内容,可以参考terminals和IDES and Text Editors,这两个配置都是比较简单的,而且集成之后更加方便。
vscode的配置
vscode的安装就不详细展开了,主要用到四个插件
-
C/C++
是微软出品,用于代码智能提示和跳转, 高亮,代码格式化,以及调试,同时不需要依赖于compile_commands.json
文件,不过速度很慢,同时提示信息不够全面,所以这个插件仅用来支持调试,我一般把它的代码提示功能关闭(因为和clangd的代码提示功能相冲突)
-
clangd
是llvm项目下的LSP服务器,另外还有一款叫ccls的(不太了解),这个插件需要搭配clangd使用,依旧使用MSYS2的UCRT64环境下进行安装,具体命令见下图
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
输入项目名称
选择类型 C 或者 C++项目
开发可执行文件 还是 库文件
cmake tools自动为我们创建了main.cpp和CMakeLists.txt文件
可以直接双击下方状态栏运行和调试按钮
运行:
调试:
可以看到,非常的方便,再也不用去写哪些tasks.json和launch.json文件了
标签:插件,msys2,cmake,vscode,pacman,配置,C++,调试 From: https://www.cnblogs.com/ericling0529/p/17937769