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

发布时间 2023-12-31 17:16:06作者: EricLing0529

【环境配置】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文件了