WSL使用VsCode运行cpp文件

文章目录

  • 缘起
  • 主要步骤
  • 参考

缘起

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

主要步骤

1.安装gcc和g++编译器
打开命令行输入wsl,然后安装即可,如下:

sudo apt-get install  gcc g++

我这里已经安装过,如下图所示。
在这里插入图片描述

使用whereis查看g++的位置,这里是/usr/bin/g++,这是待会后面配置需要用到的编译器的地址。
在这里插入图片描述
2.新建测试文件test.cpp

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

// test.cpp
#include <iostream>
#include <memory>   //使用shared_ptr需要include它int main() {//通过make_shared创建shared_ptrstd::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也将在内部指向相同的指针//这将会使引用计数变为2std::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,在这种情况下,其内部不会指向内部的任何指针//因此其引用计数将会变为0p1.reset();std::cout << "p1 Reference Count = " << p1.use_count() << std::endl;//重置shared_ptr,在这种情况下,其内部将会指向一个新的指针//因此其引用计数将会变为1p1.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中的内容如下:

{"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++)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/588976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐系统中 排序策略 CTR 预估加权平均法

CTR&#xff08;Click-Through Rate&#xff09;预估加权平均法是一种用于估计广告点击率的方法&#xff0c;其中对不同的CTR预估模型赋予不同的权重&#xff0c;通过加权平均来得到整体的CTR预估。这样的方法可以充分利用多个CTR预估模型的优势&#xff0c;提高整体的预估准确…

docker应用部署(部署MySql,部署Tomcat,部署Nginx,部署Redis)

Docker 应用部署 一、部署MySQL 搜索mysql镜像 docker search mysql拉取mysql镜像 docker pull mysql:5.6创建容器&#xff0c;设置端口映射、目录映射 # 在/root目录下创建mysql目录用于存储mysql数据信息 mkdir ~/mysql cd ~/mysqldocker run -id \ -p 3307:3306 \ --na…

TCP服务器的编写(下)

我们现在开始对我们的客户端开始封装 我们的客户端&#xff0c;创建完套接字&#xff0c;需不需要bind呢&#xff1f;&#xff1f; 当然是不需要的&#xff0c;你本身是一个客户端&#xff0c;其他人写的应用也可能是客户端&#xff0c;如果我们bind&#xff0c;一定意味着我们…

CCNP课程实验-05-Comprehensive_Experiment

目录 实验条件网络拓朴配置实现基础配置实现IGP需求&#xff1a;1. 根据拓扑所示&#xff0c;配置OSPF和EIGRP2. 在R3上增加一个网段&#xff1a;33.33.33.0/24 (用Loopback 1模拟) 宣告进EIGRP&#xff0c;并在R3上将EIGRP重分布进OSPF。要求重分布进OSPF后的路由Tag值设置为6…

算法基础之滑雪

滑雪 核心思想&#xff1a;记忆化搜索 状态表示&#xff1a; f[i][j] 表示所有从(i,j) 开始滑的路径的最大值 状态计算&#xff1a; 分成四个方向 f[i][j] max(f[i][j] , f[i][j1] 1) 且h[a][b] (下一个点) 必须严格小于 h[i][j] 才能滑过去 #include<iostream>#…

LaTeX符号大全:打破排版的边界

LaTeX符号大全&#xff1a;打破排版的边界 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一起探索一门极富表现力的排版艺术——LaTeX&…

08 HXJson

前言 这个主要是一个对象转换json处理的工具包, 依赖于HXCommon 里面主要包含了一些 字符串互转json, 对象互转json 的处理 相关使用 api 参照的是 net.sf.json 提供了相关的 get/opt/put/element 相关 api 适用于各种情况 具体的实现 这里不多做赘述 GitHub - 97065514…

Docker 容器命令总汇

目录 1、创建Docker容器&#xff08;不启动&#xff09; 2、创建Docker容器&#xff08;启动&#xff09; 3、列出正在运行的容器 4、停止和启动容器 5、重启容器 6、进入容器 7、查看容器信息 8、查看容器日志 9、删除容器和镜像 10、重命名容器 11、从旧容器复制数…

电压,电流,温度采样检测原理

电流采集电路&#xff1a; 电流采样原理&#xff1a; 电压采样电路&#xff1a; 温度检测&#xff1a;通过热敏电阻实现 以上资料来源于&#xff1a;正点原子&#xff0c;仅做学习笔记使用

Avalonia框架下实现热更新

在Avalonia框架下实现热更新&#xff08;也称为动态加载或模块化更新&#xff09;&#xff0c;通常涉及程序集的动态加载与卸载&#xff0c;以及UI元素、视图模型或其他应用程序逻辑部分的实时替换。由于Avalonia本身是一个跨平台的GUI框架&#xff0c;并没有直接内置热更新机制…

c++11--原子操作,顺序一致性,内存模型

1.原子操作 多线程下为了实现对临界区资源的互斥访问&#xff0c;最普遍的方式是使用互斥锁保护临界区。 然而&#xff0c;如果临界区资源仅仅是数值类型时&#xff0c;对这些类型c提供了原子类型&#xff0c;通过使用原子类型可以更简洁的获得互斥保护的支持。 (1). 一个实例…

力扣:209. 长度最小的子数组(Python3)

题目&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 来源&#xff1…

模版匹配历劫之路1-匹配点太多如何解决

1测试图片 2初步推测是否是提取的点太多而导致匹配时间很长 2.1通过canny的算法来提取检测点 import numpy as np import cv2 import time import matplotlib.pyplot as pltclass GeoMatch:def __init__(self):self.noOfCordinates0 # 坐标数组中元素的个数self.cordinates…

思维链COT原理探究

要进行因果分析&#xff0c;需要把思维链中的不同元素拆解开来&#xff0c;然后通过控制变量实验&#xff0c;来研究不同元素对COT效果的影响。以下两篇论文的核心差异就在于: COT的变量拆解&#xff0c;以及控制变量的实验方式。 结合两篇论文的实验结论&#xff0c;可能导致…

MIT线性代数笔记-第34讲-左右逆,伪逆

目录 34.左右逆&#xff0c;伪逆左右逆伪逆 打赏 34.左右逆&#xff0c;伪逆 左右逆 之前讲到的逆都是针对可逆方阵而言的&#xff0c;对于长方矩阵&#xff0c;实际上也有广义的逆&#xff0c;那就是左逆和右逆 左逆 当矩阵列满秩&#xff0c;即 r n r n rn时&#xff0c;…

老子的《道德经》透露,不努力反而更成功

人类生而自由&#xff0c;但到处都是枷锁。 永远不要怀疑经过慎思且足够投入的一小群人能否改变这个世界。事实上&#xff0c;只有他们才办得到。 优美灵魂的两个发展方向&#xff1a;崇拜道德的天才&#xff0c;对别人实行道德的判断。 一、道 《道德经》开始的名字是《老子…

关键字:try-catch关键字

在 Java 中&#xff0c;try-catch关键字用于异常处理。它们允许编写代码来捕获和处理异常&#xff0c;以确保程序能够在出现问题时合理地处理它们而不会崩溃。 以下是try-catch关键字的基本语法&#xff1a; 在try块中编写可能会抛出异常的代码。如果在try块中的任何代码抛出…

全连接层:神经网络的桥梁

全连接层&#xff1a;神经网络的桥梁 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一同探讨深度学习中至关重要的一环——“全连接层”&am…

Linux上使用Certbot生成免费SSL证书

Linux上使用Certbot生成免费SSL证书 补充&#xff1a;certbot在大多数linux上是自带的&#xff0c;若没有可执行以下命令下载 Ubuntu&#xff1a; sudo apt-get update sudo apt-get install --only-upgrade certbotCentos sudo yum update sudo yum install certbot一、暂时停…

JavaScript setTimeout和setInterval的用法与区别详解

目录 I. 总述 II. setTimeout()函数 III. setInterval()函数 IV. 新年倒计时案例 Javascript的setTimeOut和setInterval函数应用非常广泛&#xff0c;它们都用来处理延时和定时任务&#xff0c;下面这篇文章主要给大家介绍了关于JavaScript setTimeout和setInterval的用法与…