WSL使用VsCode运行cpp文件

文章目录

缘起

今天在阅读《C++20设计模式-可复用的面向对象设计方法(原书第2版)》的时候,遇到代码想要运行一下,于是决定使用wsl下的vscode配置cpp的环境。

主要步骤

1.安装gcc和g++编译器

打开命令行输入wsl,然后安装即可,如下:

cpp 复制代码
sudo apt-get install  gcc g++

我这里已经安装过,如下图所示。

使用whereis查看g++的位置,这里是/usr/bin/g++,这是待会后面配置需要用到的编译器的地址。

2.新建测试文件test.cpp

然后在文件目录,这里是test目录新建test.cpp文件,内容如下:如下代码来源于C++11智能指针(一):shared_ptr介绍与实例,用于学习智能指针的用法。读者直接复制使用即可。

cpp 复制代码
// test.cpp
#include <iostream>
#include <memory>   //使用shared_ptr需要include它
 
int main() {
  //通过make_shared创建shared_ptr
  std::shared_ptr<int> p1 = std::make_shared<int>();
  *p1 = 78;
  std::cout << "p1 = " << *p1 << std::endl;
 
  //查看引用计数
  std::cout << "p1 Reference count = " << p1.use_count() << std::endl;
 
  //第二个shared_ptr也将在内部指向相同的指针
  //这将会使引用计数变为2
  std::shared_ptr<int> p2(p1);
 
  //查看引用计数
  std::cout << "p2 Reference count = " << p2.use_count() << std::endl;
  std::cout << "p1 Reference count = " << p1.use_count() << std::endl;
 
  //比较智能指针
  if (p1 == p2) {
    std::cout << "p1 and p2 are pointing to same pointer\n";
  }
 
  std::cout << "Reset p1" << std::endl;
 
  //重置shared_ptr,在这种情况下,其内部不会指向内部的任何指针
  //因此其引用计数将会变为0
  p1.reset();
  std::cout << "p1 Reference Count = " << p1.use_count() << std::endl;
 
  //重置shared_ptr,在这种情况下,其内部将会指向一个新的指针
  //因此其引用计数将会变为1
  p1.reset(new int(11));
  std::cout << "p1 Reference Count = " << p1.use_count() << std::endl;
 
  //分配nullptr将取消关联指针并使其指向空值
  p1 = nullptr; 
  std::cout << "p1 Reference Count = " << p1.use_count() << std::endl;
 
  if (!p1) {
    std::cout << "p1 is NULL" << std::endl;
  }
 
  return 0;
}

切换到该目录,然后使用code .命令运行,意思是使用vscode打开当前目录。

3.编辑配置文件

使用快捷键Ctrl + Shift + P,输入c/c++, 选择编辑配置(UI),意思是以图形化界面的形式编辑json配置文件。

对于打开的C/C++配置文件,修改如下两处即可,其他可以保持默认

另外可以指定g++的版本,这里选择g++17

4.配置默认生成任务

Ctrl + Shift + P 打开命令窗口,输入task,选择任务:配置默认生成任务,点进去会看到使用模板创建tasks.json文件,选择该项,然后会出现tasks.json文件

替换tasks.json中的内容如下:

json 复制代码
{
    "version": "2.0.0",
    "windows": {
        "options": {
            "shell": {
                "executable": "bash.exe",
                "args": [
                    "-c"
                ]
            }
        }
    },
    "tasks": [
        {
            "label": "g++ build active file",
            "type": "shell",
            "command": "/usr/bin/g++",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group": "build"
        },
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 生成活动文件",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ]
}

替换举例如下所示:

5.运行cpp文件

有两种方式

第一种:使用命令行输入g++ 文件名,会编译成名字为a.out的可执行文件,然后输入./a.out即可运行,输入的结果如下图所示:

第二种:使用右上角的三角符号,运行c++文件

运行结果如下图所示

本文主要参考以下博文,对原作者表示感谢。

参考

1 VSCode配置WSL的C++环境(在VSCode通过WSL调试C++)

相关推荐
buhuizhiyuci10 小时前
【QT-百日筑基篇】修真世界摸爬滚打多年,终于黄天不负有心人,突破炼器中期——常用控件QWight的属性
开发语言·c++·qt·gui·图形化
_Narcissus_13 小时前
动态规划初探(含完整代码实现)
c语言·数据结构·c++·算法·动态规划·背包问题·最短路径
法哥201215 小时前
用 C++ 控制 CMW100,到底在干什么?
开发语言·c++
_Narcissus_15 小时前
枚举和模拟算法笔记
c语言·数据结构·c++·笔记·算法·模拟·枚举
冻柠檬飞冰走茶16 小时前
《数据结构实验指导-C++语言版》 在顺序表 list 中查找元素 x
开发语言·数据结构·c++·算法·list
Brilliantwxx16 小时前
【C++】 高阶数据结构图(1)并查集
开发语言·数据结构·c++
小鱼仙官16 小时前
Ubuntu C++ NTP校时程序
linux·c++·ubuntu
冻柠檬飞冰走茶16 小时前
《数据结构实验指导-C++语言版》 返回单链表 list 中第 i 个元素值
开发语言·数据结构·c++·算法·list
老当益壮梁奶奶17 小时前
Linux软件编程学习笔记(二)Linux文件IO编程入门:从fopen到fgetc
linux·c语言·c++·笔记·学习
sunoo-22917 小时前
C 语言文件 IO 全攻略:从基础函数到实战踩坑(BMP 读取 + 词典查询)
linux·c语言·前端·笔记·vscode·学习