弃用VS转向VS Code

2024-07-30 17:15:08 浏览数 (3)

由于Visual Studio安装即用,门槛低,便于调试,且最开始入门一直使用VS,所以在windows平台一直使用Visual Studio进行开发,但是Visual Studio的体积过于庞大,而且VS的免费的插件较少。反观VS Code其存在众多的插件,可以满足各种开发需求,可以极大地提高开发效率,所以最终还是决定转战VS Code。本文将详细讲解使用VS Code进行C/C 开发的相关配置。

1. 下载和安装

VS Code的下载地址如下:https://code.visualstudio.com/Download,单击进入到如下的下载界面

依据自己的需求,下载对应平台及芯片要求的VS Code版本。下载完成后,直接安装即可。由于安装简单,本文不再赘述。

2. 汉化

VS Code默认是英文界面,如果期望使用中文界面,可以通过扩展(或称为插件,两者等同)将VS Code界面汉化。

使用快捷键(Ctrl shift X)或者单击左侧的扩展按钮,打开扩展应用商店界面,在搜索栏输入chinese,即可找到中文插件,单击安装即可。插件安装成功后,重启VS Code便发现界面显示为中文了。

3. 环境准备

由于VS Code只是编辑器,其默认不支持C/C 开发,所以使用VS Code进行C/C 开发时,需要借助插件,并需要配置编译器和调试器。

3.1 安装C/C 扩展

安装C/C Extension Pack插件可以参考安装汉化——Simple Chinese扩展的步骤,在搜索栏输入c ,即可找到相关插件,单击安装即可。

3.2 配置编译器和调试器

编译器和调试器可依据自己需求进行选择,如之前安装了VS,便可使用VS的编译器和调试器;或者,使用MinGW的编译器和调试器都是可以的。

如此,在windows平台既可以使用MinGW,也可以使用Visual Studio的编译器和调试器,本文将分别讲解这两种配置方式。

配置VS

VS Code使用VS的编译器和调试器时存在一个前提——VS正确安装。由于VS Code限制仅当从VS开发人员命令提示符处运行 VS Code 时,cl.exe生成和调试才可用。为避免每次使用VS进行调试时都需要从VS开发人员命令提示符处运行VS Code,可以编写一个bat文件,只要执行该脚本便可保证VS Code是从VS开发人员命令提示符处运行。注意,引号中的路径需要依据本地的实际安装路径填写。

代码语言:javascript复制
@echo off  
call "C:Program FilesMicrosoft Visual Studio2022CommunityVCAuxiliaryBuildvcvarsall.bat" x64  
code

使用如上脚本打开VS Code后,打开项目所在的文件夹,便做好了使用VS进行编译和调试的基础配置。

配置MinGW

首先需要下载并解压MinGW,下载地址:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/,下载后解压到任意位置,然后配置环境变量——将bin目录添加到path中。小编将下载文件解压后放到D盘,如下图所示,便将D:mingw64bin添加到path中。

环境变量配置完成后,可以使用cmd打开终端,输入如下命令,如果出现正确路径,则表明配置成功。

代码语言:javascript复制
where gcc
where g  

综上,既可以使用VS和MinGW进行编译和调试,切记使用VS的编译器和调试器时需要使用如上的脚本从VS开发人员命令提示符处启动VS Code。

4. 单文件项目

存在如下的单文件项目,其中包含一个main.cpp文件,该文件中包含一个main函数,用于打印“Hello World!”。

4.1 运行

进入到.cpp文件或.c文件,单击运行按钮(上图绿框),将会弹出调试配置下拉框,或者使用Ctrl Shift P打开命令面板,输入“调试配置”,选择“添加调试配置命令”,弹出如下的调试配置界面,选择g 或cl.exe,单击确定即可。

单击运行按钮(上上图绿框),即可在终端输出“Hello World!”。

此时会生成task.json文件,由于小编同时配置了MinGW和VS,所以会生成两个task任务,如下所示:

代码语言:javascript复制
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C  : g  .exe 生成活动文件",//唯一的名称,可修改为唯一的任意名称,调试时有用
            "command": "D:\msys64\mingw64\bin\g  .exe",//编译器所在目录的全路径
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",//源文件
                "-o",
                "${fileDirname}\${fileBasenameNoExtension}.exe"//生成可执行程序的目录和名称,按需修改
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": false//是否为默认任务,true为是,false为否
            },
            "detail": "调试器生成的任务。"
        },
        {
            "type": "cppbuild",
            "label": "C/C  : cl.exe 生成活动文件",
            "command": "cl.exe",
            "args": [
                "/Zi",
                "/EHsc",
                "/nologo",
                "/Fe${fileDirname}\${fileBasenameNoExtension}.exe",//生成可执行程序的目录和名称
                "${file}"//源文件
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

此时单击运行按钮即可运行程序。修改task.json文件中的isDefault属性,可以修改默认的任务,当isDefault为true时为默认的任务。

4.2 调试

在.cpp文件或.c文件中,单击左侧运行和调试按钮(下图红框所示)或快捷键(Ctrl Shift D)打开运行和调试界面,

由于之前配置了task.json文件,如果单击运行和调试按钮,弹出下拉框,用于选择调试器,既可以选择g 也可以选择cl.exe。进行调试。

在运行和调试界面支持不同调试的切换,但是仅在下次启动调试时生效,不支持在调试过程中切换调试器。如下图:

虽然如上的调试可以满足单文件调试需求,但是VS Code支持配置launch.json进行自定义运行和调试。

小编配置的launch.json文件如下:

代码语言:javascript复制
{
    // 使用 IntelliSense 了解相关属性。
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(Windows) 程序员的园启动",//配置的名称
            "type": "cppvsdbg",
            "request": "launch",
            "program": "${fileDirname}\${fileBasenameNoExtension}.exe",//可执行程序路径,与task.json中的输出路径一致
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "console": "externalTerminal",//使用外部终端
            "preLaunchTask": "C/C  : cl.exe 生成活动文件"//task.json中对应的task label
        },
        {
            "name": "(gdb)程序员的园启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\${fileBasenameNoExtension}.exe",//可执行程序全路径,与task.json中的输出路径一致
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,//是否在外部终端输出
            "MIMode": "gdb",
            "miDebuggerPath":"D:\msys64\mingw64\bin\gdb.exe",//调试器全路径,
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C  : g  .exe 生成活动文件"//task.json文件中对应的task label
        }
    ]
}

注:如上的任意标签不存在时,均可以自主添加,如preLaunchTask标签默认不存在,自行添加即可。

当配置完launch.json文件后,运行和调试界面可出现自定义的调试配置,如图:

5. 多文件项目

在单文件的基础上,增加一个add函数于add.h和add.cpp文件中,其中add.h文件中进行add函数的声明,add.cpp

文件中进行add函数的定义,main.cpp文件中调用add函数,并输出结果。整体的文件布局如下:

此时若直接使用单文件的task.json和launch.json文件,会出现找不到add函数的错误,此时仅需要修改task.json文件,告知编译器此时的源文件不再是main.cpp,而是main.cpp、add.cpp两个文件。修改方法为修改源文件“${file}”为"*.cpp",便可如单文件一样,可以进行运行和调试。仅以g 为例,修改后的task.json文件如下:

代码语言:javascript复制
{
    "type": "cppbuild",
    "label": "C/C  : cl.exe 生成活动文件",
    "command": "cl.exe",
    "args": [
        "/Zi",
        "/EHsc",
        "/nologo",
        "/Fe${fileDirname}\MSVC\test.exe",
        "*.cpp"//注意此处
    ],
    "options": {
        "cwd": "${fileDirname}"
    },
    "problemMatcher": [
        "$msCompile"
    ],
    "group": {
        "kind": "build",
        "isDefault": false
    },
    "detail": "调试器生成的任务。"
}

同一文件夹下的单文件和多文件的区别为源文件的选择,单文件选择“${file}”,多文件选择“*.cpp”。

6. 多文件夹项目

在多文件项目中新增了add.h和add.cpp文件,由于其作为独立的功能,不应该和main放在一起,为此,新建add文件夹用于存储add.h和add.cpp文件,此时文件布局如下:

无论是多文件项目还是多文件夹项目,对比单文件项目而言,仅仅是文件的数量变多了,需要让编译器知晓源文件的位置,并将其编译到项目中。只是多文件夹项目不同多文件项目,多文件项目由于不同的文件在一个文件夹内,只需要修改为模糊检索即可。而多文件夹项目,需要告知编译器源文件存在于不同的文件夹内,为此,需要追加args参数,告知编译器源文件的位置。此处以VS配置为例,修改器task.json文件中对应的task如下:

代码语言:javascript复制
{
    "type": "cppbuild",
    "label": "C/C  : cl.exe 生成活动文件",
    "command": "cl.exe",
    "args": [
        "/Zi",
        "/EHsc",
        "/nologo",
        "/Fe${fileDirname}\MSVC\test.exe",
        "*.cpp", "add/*.cpp"//注意此处
    ],
    "options": {
        "cwd": "${fileDirname}"
    },
    "problemMatcher": [
        "$msCompile"
    ],
    "group": {
        "kind": "build",
        "isDefault": true
    },
    "detail": "调试器生成的任务。"
}

上例以单个子文件夹为例,若存在多个文件夹,继续向后追加即可。

7. 总结

本文主要介绍了VSCode在Windows平台下的C/C 环境搭建,包括单文件、多文件和多文件夹项目,以及如何配置task.json和launch.json文件,以实现C/C 的运行和调试。

至于VS Code生成lib、dll,以及使用使用第三方库不再赘述,因为单纯的使用task.json和launch.json完成如上工作较复杂,也没有太多价值,因为可以借助cmake来实现上述功能,该部分将在下一章节中书写。

0 人点赞