Visual Studio Code C++多文件编译运行
笔者在C++ PrimerPlus的学习过程中遇到了多个源文件编译运行的问题,由于笔者使用的是VSCode,软件本身并不支持多个源文件编译运行,可以通过一些方法来使VsCode支持多文件编译运行。笔者经研究发现,有三种方法:分别是基于g++命令、基于Cmakelist方法、以及最简单的安装工程插件法,第二种方法可以加深对编译过程的理解和VsCode的json配置文件的理解,推荐大家可以尝试试一下。
本文以一个交换函数为示例,演示了这三种方法。
Vscode工作区目录如下:
其中各文件内容如下:
头文件:
void swap(int &a, int &b);
主函数源码文件:
#include<iostream>
#include"swap.h"
using namespace std;
int main()
{
int val1 = 10;
int val2 = 20;
cout << "Before swap:\n";
cout << "val1 = " << val1;
cout << ", val2 = " << val2 << endl;
swap(val1, val2);
cout << "after swap:\n";
cout << "val1 = " << val1;
cout << ", val2 = " << val2 << endl;
return 0;
}
交换函数源码文件:
// swap.cpp
#include"swap.h"
void swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
1.基于g++命令
1.1 打开终端,点击菜单去终端的新建终端,打开终端窗口;
1.2 g++编译多文件,生成带调试信息的可执行文件
命令如下:
g++ -g .\main.cpp .\swap.cpp -o main
其中 -g 后面是两个源代码文件的名称,-o 后面是生成exe文件的名称
执行后会生成一个exe文件
如图所示:
1.3 直接在终端运行该文件,命令为:
.\main.exe
运行结果如下:
1.4 要想调试该函数,需要修改launch.json文件。
点击运行调试会产生一个tasks.json文件,一个launch.json文件,但无法成功调试,如图所示:
点击open'launch.json',修改文件,该文件中有两个关键参数,一个是program:另一个是preLaunchTask:如下图所示:
将preLaunchTask:注释掉,该行会在调试前运行tasks.json,先注释掉,将program:的参数修改成
"program": "${workspaceFolder}/main.exe",
修改后如下图所示:
点击运行调试,发现可以调试运行。
2. 基于Cmakelist
该方法需要安装cmake环境,安装方法可以参考这位大佬的教程
安装cmake教程
2.1 编写最简单的CMakeLists.txt
project(MYSWAP) // 工程名
add_executable(my_cmake_swap main.cpp swap.cpp) // 生成exe文件名,需要编译的源函数文件名称
编写完保存之后会生成一个build文件夹,里面包括编译文件所需的一些信息。
2.2 生成build文件夹之后在终端输入cd build,进入该文件夹
2.3 在命令行输入cmake ..
注:如果电脑上已经安装了VS,应该会调用微软MSVC编译器,使用(cmake -G "MinGW Makefiles" ..)代替(cmake ..)即可
仅第一次使用cmake时使用(cmake -G "MinGW Makefiles" ..) 后面可使用(cmake ..)
结果如下:
2.4 接着在命令行输入mingw32-make.exe,编译文件链接文件,之后的结果如下:
生成 my_cmake_swap.exe文件在build目录下,如下图所示:
2.5 修改launch.json文件,和第一中方法一样,修改program:
修改的代码如下:
"program": "${workspaceFolder}/build/my_cmake_swap.exe",
接下来运行文件,运行结果如下:
2.6 该代码可以调试文件,但是在修改源代码文件之后,直接运行,文件并不会重新编译,要相解决这个问题,重新编写tasks.json文件。重新编写的tasks.json的文件如下:
{
"version": "2.0.0" ,// 多文件编译的tasks
"options": {
"cwd": "${workspaceFolder}/build"
},
"tasks": [
{
"type": "shell",
"label": "make",
"command": "cmake",
"args": [
".."
]
},
{
"label": "make",
"group": {
"kind": "build",
"isDefault": true
},
"command":"mingw32-make.exe",
"args": [
]
},
{
"label": "Build",
"dependsOn":[
"cmake",
"make"
]
}
]
}
2.7 修改完tasks.json文件,还需要修改launch.json文件的preLaunchTask:这一行,修改为"preLaunchTask": "Build"便可将文件链接起来,修改如下图所示:
3. 安装C/C++ Project Generator插件,如下图所示:
该插件会自动帮我们完成CMakeList文件的编写以及json文件的修改。
3.1 按下crtl+shift+p,输入create,找到Create C++ project,如下图所示:
点击它,产生一个选择文件夹的窗口,选择或者创建一个C++项目文件夹。
创建后如下图所示:
3.2 在include文件夹添加头文件,在src文件夹添加源函数文件,然后运行就可以
注:主函数的文件必须命名为main.cpp
如下图所示:
点击调试运行,就可以完成。
总结:
VsCode的自定义功能很强大,通过实现其多个文件编译运行,是我对C++的文件单独编译运行有了一个比较深刻的认识,中间也遇到了很多问题,最终查找解决的这些问题,特别感谢bilibili的一个视频,让我入门了Cmakelist,大家想看的话,视频链接如下:
VsCode环境配置及多文件编译运行