本文为学习笔记,学习资源链接:https://www.bilibili.com/video/BV13K411M78v
Windows环境下VScode中用Cmake调试配置C++程序
1 用g++的命令编译程序
- 首先写一个值交换的函数用于演示过程
 - 调出Terminal窗口
 - 进入当前路径下的终端,输入
g++ .\main.cpp 回车即可进行编译 输入g++ 后,直接输入main.cpp 并按Tab 键即可自动补齐成上面的形式 g++ 后面跟的是需要编译的文件名  - 生成一个a.exe文件,在终端中输入
a 并按Tab键即可补齐为.\a.exe 的形式,表明要运行该程序 
2. 用g++命令调试程序
-
同上,在终端中输入g++ -g .\main.cpp -o my_single_swap 按回车执行,可得到一个名为my_single_swap.exe的文件 其中 -g 表示生成带调试信息的.exe文件;-o 表示后面为自己命名的文件名 -
想要调试程序,点击如下按钮  -
接着点击C++(GDB/LLDB) 接着选择g++.exe - 生成和调试活动文件   -
在程序中需要的地方设置断点,点击菜单栏中的Run-Start Debugging  -
运行后可以发现,VScode自动编译生成了一个与主函数同名的.exe文件,并且生成了几个.json文件 其中 launch.json 文件与调试有关,能调试main.exe文件就在于launch.json文件中包含main.exe文件的路径 
总结: VScode单文件的调试:由tasks.json负责编译生成可执行文件(相当于帮你在终端里输入了g++ -g .\main.cpp -o main ),之后由launch.json负责调试该生成的可执行文件
3. C++程序分文件编写与调试
3.1 分文件编写:
依然以上面的值交换函数为例,分别建立swap.cpp (用于放置函数),swap.h (用于放置函数声明)    在主函数中也需要包含一下swap.h的头文件
3.2 用g++命令编译多个文件
在终端中输入g++ -g .\main.cpp .\swap.cpp -o my_multi_swap 回车即可编译
3.3 编译由多文件生成的程序
执行完上一步后,按照上面说到过的步骤create a new launch.json file,此时点开launch.json文件,如下图:  此时文件要调试的程序还是默认的main.cpp这个文件,不是我们刚刚生成的my_multi_swap.exe文件,这显然是不不对的,因为刚刚已经手动生成了可执行文件,这里只需要更改一下launch.json文件里的路径即可 
4. 基于Cmake实现多文件的编译
-
在主目录里新建CmakeLists.txt 的文件 -
在该文件中输入如下命令:  -
配置VScode中的Cmake 按下ctrl+shift+p 点击Cmake:configure,选择GCC 8.1.0的编译器    -
用Cmake编译程序 在终端中输入cd .\build 进入build文件夹 输入 cmake .. 配置Cmake 输入mingw32-make.exe 回车  生成的my_cmake_swap.exe文件将在build文件夹里 -
用launch.json调试程序 打开launch.json文件,将生成的my_cmake_swap.exe添加到json文件的路径中,就可以调试该exe程序 
到目前为止,用Cmake编译调试C++程序的流程已经走完了,注意到在第3步配置Cmake的时候系统自动帮忙生成了build文件夹,这个也可以自己建立文件夹,步骤如下:
- 在主目录下,终端里输入
mkdir bulid ,即建立build这个文件夹 - 紧接着输入
cd build 即进入这个文件夹、 - 之后是上文第四步中提到的,输入
cmake .. 配置Cmake—>>输入mingw32-make.exe 回车
注意: 在输入 cmake .. 的时候,有可能因为安装了Visual Studio而调用微软的编译器,所以要改为输入cmake -G "MinGW Makefiles" .. 进行Cmake的配置
5. 配置Json
正如前面所说的,两个主要的json文件,launch.json 和 tasks.json文件,由tasks.json文件对C++程序进行编译,由launch.json文件对编译生成的exe文件进行调试
5.1 launch.json

launch.json 文件如上图所示,重点关注图中的两个红框部分,这里第二各红框被注释掉,根据我们之前列举的例子,都是手动通过:
g++ -g .\main.cpp .\swap.cpp -o my_multi_swap (g++命令)mingw32-make.exe (Cmake 命令)
率先编译好之后生成exe文件,直接修改launch.json里的路径进行调试的,所以不需要执行tasks.json,但是这种方法有个坏处,每次修改完程序之后都需要手动在终端执行一下命令,然后再能调试。那么有没有一种修改完了直接运行就能调试的方法呢?那就需要用到tasks.json。
5.2 tasks.json
- 建立一个tasks/.json文件
输入ctrl+shift+p ,在弹出的对话框中输入task,选择第一个:Tasks: configure Task ,然后继续点击create tasks.json file from template   - 修改tasks.json
打开tasks.json,可以看到下图所示,相当于我们在输入g++命令  根据需要,把相应的部分改成我们期望的即可。下图所示的命令就对应于g++的命令g++ -g .\main.cpp .\swap.cpp -o out  - Cmake的tasks.json
 上面的命令就相当于在执行 cd build cmake.. mingw32-make.exe 
|