【VSCode】Windows 下搭建 C++ 环境

23 篇文章 4 订阅
8 篇文章 1 订阅

Part.I 预备知识

在这里插入图片描述

  • MinGW 提供了一套简单方便的Windows下的基于GCC 程序开发环境。MinGW 收集了一系列免费的Windows 使用的头文件和库文件;同时整合了GNU (http://www.gnu.org/)的工具集,特别是GNU 程序开发工具,如经典gcc, g++, make等。MinGW是完全免费的自由软件,它在Windows平台上模拟了Linux下GCC的开发环境,为C++的跨平台开发提供了良好基础支持,为了在Windows下工作的程序员熟悉Linux下的C++工程组织提供了条件。
  • 安装MinGW 需要注意的几点:① 建议选择Current版本,Previous表示以前的版本;Candidate表示当前正在开发的版本,可能正在测试中,还不是非常稳定。② 安装路径请选择一个容易找到的地方,默认的C:/Enviroments/MinGW 是不错的选择(ps: 默认是C:/MinGW,但是有当需要好多环境时不如选择前者)。
  • MinGW Installation Manager 中,复选框为『绿色』表示已经安装的项目,『白色』表示还未安装的项目。如果要卸载已安装的项目,右键→Mark for removal;如果要安装未安装的项目,右键→Mark for Installation。接着点击菜单栏InstallationApply Changes即可。
  • MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin (POSIX 兼容性层) 和 MinGW-w64(从”MinGW-生成”)基础上产生的,追求更好的互操作性的 Windows 软件。 MSYS2 是MSYS的一个升级版,准确的说是集成了pacman和Mingw-w64的Cygwin升级版, 提供了bash shell等linux环境、版本控制软件(git/hg)和MinGW-w64 工具链。与MSYS最大的区别是移植了 Arch Linux的软件包管理系统 Pacman(总之就是很NB就对了)。

Part.II 搭建过程

https://blog.csdn.net/qq_40477151/article/details/103917156
详细的过程可以参看这个,下面简要记录一下整个过程。
补于 2022-12-26,用的时候发现没法看STL容器的值,有点不爽,根据前辈经验,发现是MinGW版本太低的原因,建议下更高版本的MinGW,下载教程如第三部分所示。


  • 安装MinGW: https://sourceforge.net/projects/mingw/files/latest/download
  • MinGW Installation Manager 中安装gdb, gcc, g++
  • 设置环境变量:右键『我的电脑』→属性→高级系统设置→环境变量→系统变量→新建MinGW,并将其值赋成C:\MinGW(你装在哪里就赋成啥)
  • 设置Path:在系统变量Path中添加路径%MinGW%\bin,之后点确定
  • 检查是否安装好:在powershell中输入gcc -v看看能否找到指令

然后下载一个c/c++插件,在工程目录下新建含有三个名为launch.json, tasks.json, c_cpp_properties.json文件的文件夹.vscode。这三个文件中

  • launch.json可以实现设断点调试,选择调试器与需要调试的文件进行调试。
  • tasks.json可以实现自动编译,这个只能执行最简单的编译指令。
  • c_cpp_properties.jsonccpp选项。并不太需要去动它,如果出现明明在系统环境中的头文件找不到的情况,那就很可能是这里出问题了,在includePath里加上即可。

三个文件的内容如下(可根据自己的需求更改,这是笔者的配置):
launch.json文件内容:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示  
            "type": "cppdbg",       // 配置类型,这里只能为cppdbg  
            "request": "launch",    // 请求配置类型,可以为launch(启动)或attach(附加)  
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径  
            "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可  
            "stopAtEntry": false,   // 设为true时程序将暂停在程序入口处,一般设置为false  
            "cwd": "${workspaceFolder}", // 调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录  
            "environment": [],
            "externalConsole": true,     // 调试时是否显示控制台窗口,一般设置为true显示控制台  
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应  
            "preLaunchTask": "g++",     // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc  
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

tasks.json文件内容:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558 
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "g++", //这里注意一下,见下文
            "command": "C:\\MinGW\\bin\\g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                //"-ggdb3", // 生成和调试有关的信息
                //"-Wall", // 开启额外警告
                "-static-libgcc", // 静态链接
                "-std=c++17", // 使用c++17标准
                "-finput-charset=UTF-8",    //输入编译器文本编码 默认为UTF-8
                "-fexec-charset=GB18030",   //输出exe文件的编码
                "-D _USE_MATH_DEFINES"
            ],
            "options": {
                "cwd": "C:\\MinGW\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "presentation": {
                "echo": true,
                "reveal": "never", // 在“终端”中显示编译信息的策略,可以为always,silent,never
                "focus": false,
                "panel": "shared" // 不同的文件的编译信息共享一个终端面板
            },
        }
    ]
}

c_cpp_properties.json文件内容:

{
    "configurations": [
        {
            "name": "MinGW64",
            "intelliSenseMode": "gcc-x64",
            "compilerPath": "C:\\MinGW\\bin\\g++.exe",
            "includePath": [
                "${workspaceFolder}",
                "C:\\gwork\\third-party\\Eigen" 	//Eigen库包含路径
            ],
            "cppStandard": "c++17"
        }
    ],
    "version": 4
 }

Part.III 安装较高版本的MinGW

官网教程:https://code.visualstudio.com/docs/cpp/config-mingw
因为调试 C++ 看不到vector的值,在网上搜了一下发现是 gdb 的版本太低(8.1以上就行,之前下的是7.6.1),所以才有了这些折腾。

步骤如下:

1、下载msys2

在这里插入图片描述
2、安装,将其放到一个合适的路径,比如笔者放在了A:\Programs\msys64
3、运行MSYS2,一次输入如下指令

pacman -Syu
pacman -Su
pacman -S --needed base-devel mingw-w64-x86_64-toolchain

前两个指令一路Y回车,后面的一条指令会让你选要装啥,我就装了红框的两个。

在这里插入图片描述

4、设置环境变量:

  • 右键『我的电脑』→属性→高级系统设置→环境变量→系统变量→新建MinGW,并将其值赋成A:\Programs\msys64\mingw64(你装在哪里就赋成啥)
  • 设置Path:在系统变量Path中添加路径%MinGW%\bin,之后点确定
  • 检查是否安装好:在powershell中输入gcc -v看看能否找到指令

关于 VSCode 显示 Vector 的值,在launch.json中加如下设置:

"setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]

然后就可以看到 vector 的值了。

在这里插入图片描述

Reference

  1. window 配置C++环境
  2. 用VSCode和CMake编写调试C/C++
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // 给pixmap赋值 pixmap = new QPixmap(900, 600); //设置背景色 pixmap->fill(Qt::white); //根据pixmap创建一个qpaiter painter= new QPainter(pixmap); // 使用 pixmap,也就是把这个控件加到ui里面 ui->pixmap_label->setPixmap(*pixmap); //这里关联信号和槽 connect(ui->linecolor_r_slider,SIGNAL(valueChanged(int)),this,SLOT(linecolor_changed())); connect(ui->linecolor_g_slider,SIGNAL(valueChanged(int)),this,SLOT(linecolor_changed())); connect(ui->linecolor_b_slider,SIGNAL(valueChanged(int)),this,SLOT(linecolor_changed())); connect(ui->fillcolor_comboBox,SIGNAL(currentTextChanged(QString)),this,SLOT(fillcolor_changed())); //这里初始化填充颜色下拉框: ui->fillcolor_comboBox->addItem("黑色"); ui->fillcolor_comboBox->addItem("白色"); ui->fillcolor_comboBox->addItem("红色"); ui->fillcolor_comboBox->addItem("绿色"); ui->fillcolor_comboBox->addItem("蓝色"); ui->fillcolor_comboBox->addItem("黄色"); } MainWindow::~MainWindow() { delete ui; delete pixmap; delete painter; delete linecolor;delete fillcolor; delete circle,rect; } //这个函数是生成按钮被按下时的画图实现: void MainWindow::on_draw_button_clicked() { if (ui->tabWidget->currentIndex()==0)//这个是画圆的部分 { circle =new Circle(new QPoint(ui->circle_x_spinBox->value(),ui->circle_y_spinBox->value()),ui->circle_r_spinBox->value()); circle->draw(painter); } else if (ui->tabWidget->currentIndex()==1){ rect=new Rect(new QPoint(ui->rect_x_spinBox->value(),ui->rect_y_spinBox->value()),ui->rect_a_spinBox->value(),ui->rect_b_spinBox->value()); rect->draw(painter); } ui->pixmap_label->setPixmap(*pixmap); } //这个函数就是设置边线颜色的: void MainWindow::linecolor_changed(){ linecolor=new QColor(ui->linecolor_r_slider->value(),ui->linecolor_g_slider->value(),ui->linecolor_b_slider->value()); painter->setPen(*linecolor); QPalette label_palette; label_palette.setColor(QPalette::Background, *linecolor); ui->linecolor_display_label->setAutoFillBackground(true); ui->linecolor_display_label->setPalette(label_palette); } void MainWindow::fillcolor_changed(){ QString str=ui->fillcolor_comboBox->currentText(); if (str=="黑色"){ fillcolor =new QColor(Qt::black); } else if (str=="蓝色"){ fillcolor =new QColor(Qt::blue); } else if (str=="黄色"){ fillcolor =new QColor(Qt::yellow); } else if (str=="白色"){ fillcolor =new QColor(Qt::white); } else if (str=="绿色"){ fillcolor =new QColor(Qt::green); } else if (str=="红色"){ fillcolor =new QColor(Qt::red); } painter->setBrush(QBrush(*fillcolor)); } //这个函数一不小心搞出来,没用,删了会报错? void MainWindow::on_linecolor_r_slider_actionTriggered(int action) { } //这个函数就是用来保存的功能实现: void MainWindow::on_save_button_clicked() { ofstream out("D://data.txt", ios::out|ios::app); if (ui->tabWidget->currentIndex()==0)//此处保存圆 { out<<"circle"<<endl; out<<Circle::count<<endl; out<center->x()<<" "<center->y()<<" "<r<tabWidget->currentIndex()==1)//此处保存矩形 { out<<"rect"<<endl; out<<Rect::count<<endl; out<northeast->x()<<" "<northeast->y()<<" "<width<<" "<height<<" "<<endl; Rect::count++; } out<red()<<" "<green()<<" "<blue()<<" "<<endl; out<red()<<" "<green()<<" "<blue()<<" "<>str){ if (str=="rect"){ infile>>z>>a>>b>>c>>d; rect = new Rect(new QPoint(a,b),c,d); infile>>a>>b>>c; linecolor=new QColor(a,b,c); painter->setPen(*linecolor); infile>>a>>b>>c; fillcolor=new QColor(a,b,c); painter->setBrush(QBrush(*fillcolor)); rect->draw(painter); } else{ infile>>z>>a>>b>>c; circle=new Circle(new QPoint(a,b),c); infile>>a>>b>>c; linecolor=new QColor(a,b,c); painter->setPen(*linecolor); infile>>a>>b>>c; fillcolor=new QColor(a,b,c); painter->setBrush(QBrush(*fillcolor)); circle->draw(painter); } ui->pixmap_label->setPixmap(*pixmap); } infile.close();} void MainWindow::on_clear_button_clicked() { pixmap->fill(Qt::white); ui->pixmap_label->setPixmap(*pixmap); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪猪头拯救地球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值