Visual Studio Code C++多文件编译运行

笔者在C++ PrimerPlus的学习过程中遇到了多个源文件编译运行的问题,由于笔者使用的是VSCode,软件本身并不支持多个源文件编译运行,可以通过一些方法来使VsCode支持多文件编译运行。笔者经研究发现,有三种方法:分别是基于g++命令、基于Cmakelist方法、以及最简单的安装工程插件法,第二种方法可以加深对编译过程的理解和VsCode的json配置文件的理解,推荐大家可以尝试试一下。
本文以一个交换函数为示例,演示了这三种方法。
Vscode工作区目录如下:
image
其中各文件内容如下:
头文件:

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文件
如图所示:
image
1.3 直接在终端运行该文件,命令为:

.\main.exe

运行结果如下:
image
1.4 要想调试该函数,需要修改launch.json文件。
点击运行调试会产生一个tasks.json文件,一个launch.json文件,但无法成功调试,如图所示:
image
点击open'launch.json',修改文件,该文件中有两个关键参数,一个是program:另一个是preLaunchTask:如下图所示:
image
将preLaunchTask:注释掉,该行会在调试前运行tasks.json,先注释掉,将program:的参数修改成

"program": "${workspaceFolder}/main.exe",

修改后如下图所示:
image
点击运行调试,发现可以调试运行。

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 ..)

结果如下:
image
2.4 接着在命令行输入mingw32-make.exe,编译文件链接文件,之后的结果如下:
image
生成 my_cmake_swap.exe文件在build目录下,如下图所示:
image
2.5 修改launch.json文件,和第一中方法一样,修改program:
修改的代码如下:

"program": "${workspaceFolder}/build/my_cmake_swap.exe",

接下来运行文件,运行结果如下:
image
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"便可将文件链接起来,修改如下图所示:
image

3. 安装C/C++ Project Generator插件,如下图所示:

image
该插件会自动帮我们完成CMakeList文件的编写以及json文件的修改。
3.1 按下crtl+shift+p,输入create,找到Create C++ project,如下图所示:
image
点击它,产生一个选择文件夹的窗口,选择或者创建一个C++项目文件夹。
创建后如下图所示:
image
3.2 在include文件夹添加头文件,在src文件夹添加源函数文件,然后运行就可以
注:主函数的文件必须命名为main.cpp
如下图所示:
image
点击调试运行,就可以完成。

总结:
VsCode的自定义功能很强大,通过实现其多个文件编译运行,是我对C++的文件单独编译运行有了一个比较深刻的认识,中间也遇到了很多问题,最终查找解决的这些问题,特别感谢bilibili的一个视频,让我入门了Cmakelist,大家想看的话,视频链接如下:
VsCode环境配置及多文件编译运行

posted @ 2021-12-21 23:41  Fight!GO  阅读(5181)  评论(3编辑  收藏  举报