VSCode的C++开发环境配置

C++编译原理简介

一个完整的C++程序开发大致经历以下几个步骤:

  • coding: 使用编辑器编写程序,这个文件就是程序源代码。
  • compile: 编译源代码,这意味着将程序源代码翻译成机器语言,得到目标代码(object code,以o或obj作为文件后缀),如果有语法错误,则会编译失败。
  • link: 将目标代码、库代码和启动代码统一在一起。
  • build:compile+link+生成exe可执行程序几个步骤合在一起,就成为构建(build)。


已有环境:

  • Windows 10系统
  • Visual Studio Code

Step1:安装编译器

大多数Linux发行版与MacOS系统都自带C++编译器,而Windows则通常没有。在命令行输入命令检查是否有gcc编译器:

g++ --version

检查是否有clang编译器:

clang --version

命令行显示:


则说明编译器不存在。
首先我们在windows安装MYSYS2

  • MSYS2是一组工具和库,为用户提供易于使用的环境,用于构建、安装和运行本机 Windows 软件。此工具包含mintty命令行终端,以及bash,以及git和subversion等版本控制工具,以及tar和awk等工具。MSYS2 为 GCC、mingw-w64、CPython、CMake、Meson、OpenSSL、FFmpeg、Rust、Ruby 等提供最新的原生构建。它提供了一个名为Pacman的软件包管理系统。

安装完成后,需要勾选Run MSYS 64bit now:



然后在命令行输入pacman -Syu以更新软件包:

$ pacman -Syu
:: Synchronizing package databases...
 mingw32                        805.0 KiB
 mingw32.sig                    438.0   B
 mingw64                        807.9 KiB
 mingw64.sig                    438.0   B
 msys                           289.3 KiB
 msys.sig                       438.0   B
:: Starting core system upgrade...
warning: terminate other MSYS2 programs before proceeding
resolving dependencies...
looking for conflicting packages...

Packages (6) bash-5.1.004-1  filesystem-2021.01-1
             mintty-1~3.4.4-1  msys2-runtime-3.1.7-4
             pacman-5.2.2-9  pacman-mirrors-20201208-1

Total Download Size:   11.05 MiB
Total Installed Size:  53.92 MiB
Net Upgrade Size:      -1.24 MiB

:: Proceed with installation? [Y/n]
:: Retrieving packages...
 bash-5.1.004-1-x86_64            2.3 MiB
 filesystem-2021.01-1-any        33.2 KiB
 mintty-1~3.4.4-1-x86_64        767.2 KiB
 msys2-runtime-3.1.7-4-x86_64     2.6 MiB
 pacman-mirrors-20201208-1-any    3.8 KiB
 pacman-5.2.2-9-x86_64            5.4 MiB
(6/6) checking keys in keyring       100%
(6/6) checking package integrity     100%
(6/6) loading package files          100%
(6/6) checking for file conflicts    100%
(6/6) checking available disk space  100%
:: Processing package changes...
(1/6) upgrading bash                 100%
(2/6) upgrading filesystem           100%
(3/6) upgrading mintty               100%
(4/6) upgrading msys2-runtime        100%
(5/6) upgrading pacman-mirrors       100%
(6/6) upgrading pacman               100%
:: To complete this update all MSYS2 processes including this terminal will be closed. Confirm to proceed [Y/n]

完成这个步骤后会关闭命令行窗口。我们需要再次在开始菜单搜索MSYS2启动命令行,输入pacman -Su更新剩下的包(这些步骤是官方教程给的,我也想不懂为啥是这样的):

$ pacman -Su
:: Starting core system upgrade...
 there is nothing to do
:: Starting full system upgrade...
resolving dependencies...
looking for conflicting packages...

Packages (20) base-2020.12-1  bsdtar-3.5.0-1
              [... more packages listed ...]

Total Download Size:   12.82 MiB
Total Installed Size:  44.25 MiB
Net Upgrade Size:       3.01 MiB

:: Proceed with installation? [Y/n]
[... downloading and installation continues ...]

接下来输入pacman -S --needed base-devel mingw-w64-x86_64-toolchain来安装mingw-w64 gcc工具集。

Step2:GCC加入环境变量

如下图,在系统变量->Path中添加C:\msys64\mingw63\bin


启动或者重启Powershell,输入gcc --version,显示了gcc版本,则说明编译器安装成功。

Step3:vscode中构建C++程序

首先在vscode扩展商店里安装C/C++以及C/C++ Extension Pack,再安装一个code runner



然后在工程根目录下编写C++程序,以编写一个计算阶乘的程序为例:

#include<iostream>
#include <stdlib.h>
using namespace std;


long long fact(long long n) {
    if (n < 0) return -1;
    if (n == 0) return 1;
    return n * fact(n - 1);
}


int main() {
    long long n;
    cout << "Please input number: ";
    cin >> n;
    long long res = fact(n);
    cout << "Factorial of " << n << " is " << res << endl;
    system("pause...");
    return 0;
}

如何build写好的程序:点击终端/Terminal->运行生成任务/Run build task->选择C/C++: g++.exe生成活动文件



此时在左侧资源管理器显示了构建的exe文件:


快捷键ctrl+~在vscode调出powershell,输入./fact,就可以启动程序了:

c_cpp_properties.json配置文件

VSCode C++配置文件主要包括./.vscode目录下的:

  • c_cpp_properties.json:c/c++相关的基础配置
  • tasks.json:构建任务的配置
  • launch.json:debug配置

点击ctrl+shift+p调出命令面板,然后输入c/c++,选择edit configurations:



此时工程目录就会自动新建.vscode文件夹,编辑里面的c_cpp_properties.json:

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE",
                "MAX_NUM=100"
            ],
            "windowsSdkVersion": "10.0.19041.0",
            "compilerPath": "C:\\msys64\\mingw64\\bin\\g++.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

configurations下面包含了多组配置对象,version官方建议不要修改此字段,它主要用于版本跟踪。configurations下面的配置有:

  • includePath:引入头文件的路径。我通常会将需要引入的头文件复制到工程目录的include子路径下,includePath写"${workspaceFolder}/include"
  • compilerPath:编译器路径,填写刚才安装的编译器路径C:\msys64\mingw64\bin\g++.exe
  • intelliSenseMode:智能感知编译器版本,不同系统有不同的默认值(MSVC,gcc,clang)。我填写gcc-x64
  • defines:IntelliSense引擎在解析文件时使用的预处理器定义列表

tasks.json配置文件

tasks.json将会告诉vscode如何构建你的c++程序。点击终端->配置默认生成任务,此时.vscode目录会新建一个tasks.json配置文件:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe 生成活动文件",
            "command": "C:\\msys64\\mingw64\\bin\\g++.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "编译器: C:\\msys64\\mingw64\\bin\\g++.exe"
        }
    ]
}

tasks内包含多组任务配置对象,每个对象的配置如下:

  • label:任务名称
  • command制定用什么编译器构建,可以写编译器的绝对路径;如果编译器添加到了系统变量,也可以直接写g++;
  • args:命令行中给g++传入的参数

launch.json配置文件

此配置文件主要用于debugger的配置。点击运行->添加配置->C++ (GDB/LLDB),选择编译器,此时.vscode目录下会自动生成launch.json配置文件:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe 生成活动文件"
        }
    ]
}

在此我直接使用系统默认的配置,更详细的配置参考下方reference的debugging。然后给程序打好断点,点击左侧活动栏的运行和调试,点击g++ 生成和调试活动文件,就可以debug了:

Reference

C/C++ for Visual Studio Code
MSYS2 installation guide
c_cpp_properties.json reference
Debugging

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容