learn from: https://subingwen.cn/vscode/cpp-windows/
编译工具
对于上大一初学编程的同学来说,如果受不了比自己年纪还大的DEV C++,可以使用最新版本的Visual Studio,即装即用无需额外配置,也可以利用扩展进行vibe coding和复杂工程构建;但是整个软件过于臃肿,交叉编译和跨平台开发的能力暂时还不够灵活全面,因此今天为大家介绍VScode上搭建C/C++环境的方法。
首先是编译器的安装,这边使用MinGW ,通用性更强,最后确保gcc可用即可。关于gcc的介绍我这边就不再赘述了,之前的文章已经写了太多遍,大家也可以自行去网上搜索。这边只提两个注意点:①如果你已经安装了Qt,那么直接配置环境变量即可;②这里的gcc是编译x86平台运行程序的,和我们编译单片机固件的使用的arm-none-eabi-gcc是两回事;至于开发嵌入式Linux系统需要的交叉编译工具,则是arm-poky-linux-gnueabi这类的。

下一个需要的工具是CMake,CMake是一个跨平台的编译工具,可以用简单的语句来描述所有平台的编译过程。他能够输出各种各样的makefile或者project文件。Cmake并不直接建构出最终的软件,而是产生标准的项目构建文件(如Linux的Makefile或Windows Visual C++的projects/workspaces),然后再调用编译器按照构建文件规则编译整个项目。现在越来越多的开源项目都支持使用CMake进行项目构建,如果想要在VSCode搭建的C++开发环境中实现类似IDE的一
键编译或者一键调试的效果,就可以依赖CMake来解决这个问题。注意:CMake的环境变量也需要配置。

语法检查
在 vscode 中编写 C/C++ 程序并搭建一个类似 IDE 的编译调试环境一共需要安装两个插件:C/C++、CMake Tools。注意,现在不需要再单独下载CMake插件了。首先需要基于 vscode 的扩展面板搜索插件名,找到插件之后,直接安装就可以。

单文件编译与调试
gcc编译所有源文件为可执行文件命令:
bash
gcc *.c -0 Test
如下图所示,推荐大家用git bash终端最省事。

下面开始调试,我们调试C\C++需要使用GDB,注意Qt里面也有可以复用,没有的话就自己从下面网址下一个。
检查方法:

VScode运行调试代码需要launch.json与task.json指示它。如果我们下载了微软官方的C/C++插件,我们就可以自动生成这两个文件。
自动生成task.json的标准操作:

自动生成launch.json的标准操作:

这两个地方记得按照你的实际情况更改哦。

下面划重点,gcc生成可调试程序需要显式声明编译选项-g:
bash
gcc -g your_code.c -o your_program
现在可以打断点调试了:

多文件编译
多个源文件编译成可执行文件主要有两种方式,第一种依然是使用gcc命令:
bash
gcc -g *.c -o test
针对源文件、头文件分开的标准架构,gcc也设计了标准方法,比如下面这种:

命令如下:
bash
$ gcc ./Src/*.c -o test -I ./Inc/
另外一种是使用CMake工具。gcc命令一般适合在架构简单的工程下使用,如果我们想要编译的东西是Linux内核呢?gcc命令可能就显得有些捉襟见肘。
使用CMake工具咱们分为下面几步走。
步骤1,目录下新建CMakeLists.txt文件:
bash
touch CMakeLists.txt
步骤2,了解CMake常用函数:
bash
#创建了一个名叫MultiSource的cmake项目
project(MultiSource)
#获取src目录下的所有源文件,并将其存储在变量SRC_SUB中
aux_source_directory(Src SRC_SUB)
aux_source_directory(. SRC_CUR)
#将SRC_SUB和SRC_CUR变量中的源文件列表合并,生成可执行文件signtest
add_executable(signtest ${SRC_SUB} ${SRC_CUR})
# 设置包含的头文件目录
include_directories(Inc)
不过貌似我多余写注释,鼠标悬停CMakeTools会有提示:

此外想要多了解一些CMakeLists的可以参考拙作:
那一期视频里面Keysking大哥带着大家研读了ST原厂工程师写的CMakeLists。这其实是我非常推崇的一种学习方式,现在这个年代大部分年轻人都有点浮躁看不上这个看不上那个,觉得官方写的库都是屎山,所谓文人相轻,但事实上真正的工程管理维护完全是另外一回事。今年有幸进入一家芯片公司维护自研芯片配套SDK才有了如此感慨,对ST官方现在是越了解越拥护(doge。
步骤3:按下CTRL+SHIFT+P,进行CMake Configure。

这里忘记声明CMake最低版本要求了:
bash
cmake_minimum_required(VERSION 3.10)
#创建了一个名叫MultiSource的cmake项目
project(MultiSource)
#获取src目录下的所有源文件,并将其存储在变量SRC_SUB中
aux_source_directory(Src SRC_SUB)
aux_source_directory(. SRC_CUR)
#将SRC_SUB和SRC_CUR变量中的源文件列表合并,生成可执行文件signtest
add_executable(signtest ${SRC_SUB} ${SRC_CUR})
# 设置包含的头文件目录
include_directories(Inc)
如果成功配置了,就可以看到build文件夹了。

下面用终端进入build目录,使用下面的命令生成构建文件:
bash
cmake ..
具体作用:

可以看到CMake基于我们编写的CMakeLists.txt生成了大量附属文件,最重要的莫过于这个Makefile,它会指导gcc进行源文件编译。

再下面使用mingw32命令编译源文件:
bash
mingw32-make.exe
效果如下:

现在有简单方法:

番外篇------基于Clangd语法检查
老实讲,我不是很推荐使用微软给我们提供的语法检查插件,我个人的使用体检是复杂项目的语法检查和定义跳转不太精准,当然也有可能是我使用的问题。我这边更推荐大家使用基于llvm的clangd,大家可以自行去官网下载一整个develop kit,然后像gcc那样添加到环境变量之中。注意这里的clang有目标Target。

注意,为了让VScode启动这些工具链,需要一些安装一些插件,我这边是为VScode新建一个配置使用这个方案:

并且参考我的这篇文章设置clangd path。