VSCode对C++程序的多文件程序编译和调试
前言
最近在使用vscode进行C++的学习,发现编译多文件程序的时候通过F5(运行——启动调试)无法编译出可执行.exe文件,于是在进行了学习和尝试,目前可以编译和调试多文件程序了,参考视频
下文提到的cmake配置文件,大家如果需要可以去上面参考视频的博主的公众号"VSCode"回复cpp获取
程序
前提
vscode已经配置好mingw文件
单文件
本程序比较简单,是一个交换两个参数的程序
#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
int main(int argc,char **argv)
{
int val1=10;
int val2=20;
cout<<"before swap"<<endl;
cout<<"val1="<<val1<<endl;
cout<<"val2="<<val2<<endl;
cout<<"after swap"<<endl;
swap(val1,val2);
cout<<"val1="<<val1<<endl;
cout<<"val2="<<val2<<endl;
return 0;
}
目前没有配置.json文件,先采用终端调试法用命令行,进行一下可执行文件的生成
命令行:
g++(编译器)
-g(生成可调式信息)
./main.cpp(需要编译的文件名和位置)
-o(为生成可执行文件命名)
kk(生成的可执行文件的名称)
./kk.exe 执行可执行文件
终端调试法
把上面的main.cpp修改成多文件模式
修改后的程序
swap.h
void swap(int &a,int &b);
swap.cpp
#include"swap.h"
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
main.cpp
#include<iostream>
#include"swap.h"
using namespace std;
int main(int argc,char **argv)
{
int val1=10;
int val2=20;
cout<<"before swap"<<endl;
cout<<"val1="<<val1<<endl;
cout<<"val2="<<val2<<endl;
cout<<"after swap"<<endl;
swap(val1,val2);
cout<<"val1="<<val1<<endl;
cout<<"val2="<<val2<<endl;
return 0;
}
生成可执行文件
mytest.exe是可执行也可调试的文件,调试需要.json文件
点击运行,下图红框
点击运行和调试后选择:
C++(GDB/LLDB)
g++.exe——生成和调试活动文件
这个时候会显示错误,系统会给你配置一些.json文件,我们需要对这些.json文件进行修改才能进行调试
如下图进行修改
再按F5就可进行调试和运行了,但是目前的执行不能生成外部的执行窗口,
把launch.json进行如下修改就可以了 false改成true,再main.cpp下按F5就可以执行mytest.exe程序了,或者打断点也可进行调试
Cmake调试法
配置cmake文件
将文件路径配置到环境变量中
打开控制面板——系统与安全——系统——高级系统设置
只需要修改用户变量就可以了
编辑——新建,把上面的cmake文件下的bin文件路径添加到环境变量中,添加好了后就按确定——确定——确定
在vscode中安装Cmake工具和Cmake tools工具
现在准备工作就做好了
写CMakesLists.txt文件
CMakeLists.txt文件名不能写错,一定得是这个!!!
MYwork是一个随便命名的工程名(我目前还没有发现在哪里使用)
Cmake_swap是我们通过这种方法将会生成的可执行文件名
写好CMakeLists.txt文件后按ctrl+shift+p键
选择CMake configure
选择GCC8.2.0(可能版本不一样,差不多就是选一个gcc的编译器
)
然后生成了一个build文件夹
目前还没有生成我们的Cmake_swap.exe可执行文件的
然后通过终端进入build文件夹
然后输入 cmake …(cmake空格两点 这里显示成3点了)
然后输入windows下的make应用程序 mingw32-make.exe
然后你会发现在build目录下生成了我们的可执行文件Cmake_swap.exe
调试这个可执行文件,需要修改launch.json文件
然后在main函数下按F5可进行exe文件执行,如果需要窗口暂停需要在main函数 中的return 0前加system(“pause”);加了之后要重新在终端执行一下cmake的程序mingw32-make.exe更新一下Cmake_swap.exe文件
我太啰嗦了!!因为希望后面我自己忘了的时候能够看懂,所以写的很详细啦
给一个