浅谈VScode配置C++编译环境


笔者之前在实验室学长的推荐下,一直使用VS完成代码的编辑调试工作,但了解到对于文档编译这一功能,VS只支持windows下的多文件编译,无法在Ubantu系统下完成该工作,所以转而进行VScode的使用学习。
在本文中笔者将分享一些关于这几天安装调试VScode,配置C++编译环境过程中的一些心得体会,一方面希望为读者提供一定的帮助,一方面帮助我自己在日后的配置过程中,回顾之前踩过的坑。

VScode下载

关于VScode的下载,笔者是在其官网直接下载的,之后按照正常的下载流程逐步安装即可。
VScode官网

MinGW的安装

MinGW是什么?
MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境。MinGW 收集了一系列免费的Windows 使用的头文件和库文件;同时整合了GNU ( http://www.gnu.org/ )的工具集,特别是GNU 程序开发工具,如经典gcc, g++, make等。MinGW是完全免费的自由软件,它在Windows平台上模拟了Linux下GCC的开发环境,为C++的跨平台开发提供了良好基础支持,为了在Windows下工作的程序员熟悉Linux下的C++工程组织提供了条件。
简单理解,MinGW为windows系统提供了一个C/C++编译环境。
这里就涉及VS和VScode的区别,VScode实际上就是一个“文本文档”,刚刚下载完成的VScode仅仅具有文本编辑功能,而VS具备了文本编辑、代码编译、运行调试等诸多功能,但相对应的,VS的体积也非常大,所以在便捷性上,VScode明显优于VS。
但这也意味着,想要让VScode具备各种各样的功能,就要完成更多的配置工作。
具体的MinGW安装,还要涉及配置环境变量等工作,具体的操作可以参考该文章:

https://blog.csdn.net/qq_43041976/article/details/100542557

注意,MinGW的安装路径要搞清楚,无论是配置环境变量还是配置编译环境,都要用到其地址。
笔者的安装位置

什么是环境变量

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。
环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。
这里笔者想到了在调试STM32和MK66单片机过程中,需要将调用到的.h文件添加到一个特定的位置,让编译器可以找到文件在哪,与这里的配置环境变量或许有异曲同工之妙。
环境变量配置地点
环境变量位置为:此电脑 - 属性 - 高级系统设置 - 高级 - 环境变量 - 系统变量 - Path

C++小工程构成

结合笔者的实际配置经验,想要在VScode中运行C++程序,至少要有以下几个组成部分:

  1. 工程文件夹
  2. 一个名为.vscode的文件夹
  3. 一个cpp后缀名文件
  4. c_cpp_properties.json文件
  5. launch.json文件
  6. tasks.json文件

笔者完全采用新建的方式完成了这几个文件的创建,完成后在VScode界面左侧的资源管理器会出现如下图的工程结构:
VScode中C++最小工程
在建立工程中,我首先创建了一个名为VSCODE_TEST的文件夹,在该文件夹中创建了名为helloWorld.cpp的文件,同时创建了名为.vscode的文件夹,将三个json文件创建在这个.vscode文件夹中。
图中显示的.exe文件是编译成功后工程自动生成的运行文件。

cpp及json文件中的代码

  1. cpp文件
    cpp文件是我们书写主函数的文件,在该文件中,只需要完成最基本的C++代码即可,这次我采用打印“我爱SLAM”来测试工程是否运行正常。
#include <iostream>
using namespace std;

int main()
{
    
    

    cout<<"我爱SLAM"<<endl;
    
    system("pause");
    return 0;
}
  1. c_cpp_properties.json
    该文件是编译运行的重要文件之一,涉及多个MinGW文件地址的写入,这些地址的获取在前述文章中有提到,其中第一条地址需要根据实际地址自行修改,其余的则可以直接通过“运行”窗口输入指令直接生成。
{
    
    
    "configurations": [
        {
    
    
            "name": "Win32",
            "includePath": [
                "${workspaceRoot}",
                "E:/MinGW/mingw64/include/**",
                "E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++",
                "E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32",
                "E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward",
                "E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include",
                "E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed",
                "E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "__GNUC__=6",
                "__cdecl=__attribute__((__cdecl__))"
            ],
            "intelliSenseMode": "msvc-x64",
            "browse": {
    
    
                "limitSymbolsToIncludedHeaders": true,
                "databaseFilename": "",
                "path": [
                    "${workspaceRoot}",
                    "E:/MinGW/mingw64/include/**",
                    "E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++",
                    "E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32",
                    "E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward",
                    "E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include",
                    "E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed",
                    "E:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include"
                ]
            }
        }
    ],
    "version": 4
}
  1. launch.json
{
    
    
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
    
    
            "name": "g++.exe - 生成和调试活动文件",
            "type": "cppdbg",                       // 只能是cppdbg
            "request": "launch",                    // launch:启动,attach:附加
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",    // 需要调试的程序
            "args": [],                             // 调试时传递给程序的参数
            "stopAtEntry": false,                   // 调试时是否停在程序入口:{true:是,false:否}
            "cwd": "${workspaceFolder}",            // 工作目录
            "environment": [],                      // 额外的环境变量
            "externalConsole": true,                // true:输出到外部终端;false:只输出到软件终端(有显示不全的可能)
            "MIMode": "gdb",
            "miDebuggerPath": "E:\\MinGW\\mingw64\\bin\\gdb.exe", // 调试gdb路径
            "setupCommands": [                      // 暂时不知道作用
                {
    
    
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe build active file" // 预编译任务名称,和tasks.json中的label必须相同
        }
    ]
}

该文档一些语句的功能已经在注释中标出,注意这里同样要结合自己的MinGW修改gdb.exe的地址。

  1. tasks.json
{
    
    
    "tasks": [
        {
    
    
            "type": "shell",
            "label": "C/C++: g++.exe build active file",
            "command": "E:\\MinGW\\mingw64\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
    
    
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
    
    
                "kind": "build",
                "isDefault": true
            }
        }
    ],
    "version": "2.0.0"
}

同样注意,这里要自行修改g++.exe的地址。

运行程序

在以上工作完成后,在cpp文件界面(不知道为什么要在这个文件,否则会报错),点击左侧的运行界面(一个小虫子),点击运行程序,即可实现程序的运行。运行结果如图:
运行结果
这里由于在launch.json文件设置为"externalConsole": true, 所以可以出现黑色的程序运行框,如果设置为false,则会在下方的“终端”输出打印。
另外在输出汉字的时候,可能会出现乱码,笔者参照百度到的设置方法,实现了汉字的正常显示,具体方法为重新设置地区,并且在一个地方打上勾勾。
具体流程见该文章:

https://blog.amahv.cn/2020/06/24/vscode-shu-chu-chuang-kou-zhong-wen-luan-ma/

后记

这里没有提到VScode插件的使用,以及一些具体的安装过程,也还没有涉及到cmake的使用,建议读者多方查阅其他网友的分享,肯定会收获很多。
在本次配置VScode过程中,初步感受了其复杂和优雅之处,之后在Ubantu系统下配置时,应该会再出一篇总结文章。

感谢您的阅读!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41883714/article/details/109137703