用vscode配置C++3种编译器及多文件编译

news2024/11/24 18:46:17

末尾附上最终的模板

Vscode开发环境配置

  • C++有很多种编译器,最重要的有三种
    • GNU的GCC(推荐)
    • 微软的MSVC
    • Clang/LLVM

C++的最新标准是C++23,各个编译器对C++各个标准的支持情况是不同的:

C++ compiler support - cppreference.com

注意主要看C++20的支持情况

用Vscode配置可以支持三种编译器的开发环境

  • 因为要支持MSVC(微软)所以建议你在Windows.上实操
  • 第一步:
    • 下载GCC和Clang以及MSVC
      • gcc、clang->mingw(https://winlibs.com/)
      • msvc->VS2019或是vs2022
    • 配置环境变量
    • 测试是否成功
  • 第二步
    • 下载Vscode
    • 创建一个文件夹cppenv

windows上安装msvc

下载visual studio 2022,安装 “使用C++的桌面开发”

gcc和clang在windows上可以通过mingw,网址 WinLibs - GCC+MinGW-w64 compiler for Windows 这个网址主要是移植一些GNU的东西到windows上

打开网址后,往下滑动,可以看到

选择对应的版本即可。我这里选择 Win64: 7-Zip archive

下载后解压到某个目录,然后配置环境变量即可

示例:

解压到 D:\env\mingw64

然后把这个D:\env\mingw64\bin目录加入到环境变量

这不bin目录下面包含g++ clang gdb等

可以打开命令行 输入 g++ --version clang++ --version 验证是否安装成功

创建C++项目模板

创建一个目录 cppenv 然后用vscode打开

创建main.cpp

#include <iostream>
using namespace std;

int main()
{
    cout << "env" << endl;
    return 0;
}

 下载c/c++插件

使用方法可以点击上图里面的Documentation,地址为 C++ programming with Visual Studio Code 

 配置task.json:

点击Configure Tasks...后会出现下图,一堆的你当前电脑安装过的编译器

 

先配置一个GNU的gcc

点击

点击后会生成tasks.json 

 

可以将label的名字改下,例如: GCC Compiler

修改下参数,指定使用的c++版本,这里改成c++11

 

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "GCC Compiler",
            "command": "W:\\env\\mingw64\\bin\\g++.exe",
            "args": [
                "-std=c++11",
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "compiler: W:\\env\\mingw64\\bin\\g++.exe"
        }
    ]
}

 再配置一个clang的编译器

 要选择clang++不要选择上面的两个clang

 

同样 改名 加c++版本

最好再配置微软的MSVC,这个就多点步骤了,

选择这个

 点击后生成

另外关键点:

我们选的是cl.exe,但是我们在终端,发现cl找不到。

但是在Developer Command Prompt for VS 2002的终端里面是有 cl的 

所以我们需要在这个 Developer Command Prompt for VS 2002的终端,进入到项目目录,然后用code 打开(先关闭现有的) 

 

然后发现vscode的终端也能执行cl了,(其实应该就是加载了Developer Command Prompt for VS 2002的环境变量,跟shell里面sourc一些变量一样)

测试下MSVC

生成的东西有点多。

最终tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "GCC Compiler",
            "command": "W:\\env\\mingw64\\bin\\g++.exe",
            "args": [
                "-std=c++11",
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "compiler: W:\\env\\mingw64\\bin\\g++.exe"
        },
        {
            "type": "cppbuild",
            "label": "Clang Compiler",
            "command": "W:\\env\\mingw64\\bin\\clang++.exe",
            "args": [
                "-std=c++11",
                "-fcolor-diagnostics",
                "-fansi-escape-codes",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "compiler: W:\\env\\mingw64\\bin\\clang++.exe"
        },
        {
            "type": "cppbuild",
            "label": "MSVC Compiler",
            "command": "cl.exe",
            "args": [
                "/Zi",
                "/std:c++latest",
                "/EHsc",
                "/nologo",
                "/Fe${fileDirname}\\${fileBasenameNoExtension}.exe",
                "${file}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": "build",
            "detail": "compiler: cl.exe"
        }
    ]
}

 

 以后可以有项目 可以直接复制这个tasks.json,也可以cp -r cppenv yourpathname

另外也可以安装code runner插件,一键运行

也可以指定C++版本

 

 

 

再就是如何debug

1 可以使用gdb,mingw里面有

2 vscode里面直接debug

 

 点击上图4指向的位置后

 

选择上图红色框即可

总结注意事项

MSVC需要进入Developer Command Prompt for VS2019/2022才能编译c++项目

C++23先阶段就是坑,跳进去就出不来了

推荐大家用GCC

 

多文件编译

 

示例代码

 main.cpp

#include <iostream>
#include "yourfile.h"
using namespace std; // 头文件中不建议加上这行,但是主文件建议加上这行,比较方便

int main()
{
    cout << add(1, 2) << endl;
    return 0;
}

yourfile.cpp

#include "yourfile.h"

int add(int x, int y)
{
    return x + y;
}

yourfile.h

#ifndef YOURFILE_H
#define YOURFILE_H

int add(int, int);

#endif

方式1、通过命令行编译

g++ -o main.exe main.cpp yourfile.cpp

main.exe执行即可

方式2、分开 先生成obj文件,再链接

g++ -c main.cpp yourfile.cpp

g++ -o main.exe main.o yourfile.o

配置vscode支持多文件编译

 

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "GCC Compiler",
            "command": "W:\\env\\mingw64\\bin\\g++.exe",
            "args": [
                "-std=c++11",
                "-fdiagnostics-color=always",
                "-g",
                // "${file}",
                "${workspaceFolder}\\*.cpp",
                "-o",
                // "${fileDirname}\\${fileBasenameNoExtension}.exe"
                "${workspaceFolder}\\main.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "compiler: W:\\env\\mingw64\\bin\\g++.exe"
        },
        {
            "type": "cppbuild",
            "label": "Clang Compiler",
            "command": "W:\\env\\mingw64\\bin\\clang++.exe",
            "args": [
                "-std=c++11",
                "-fcolor-diagnostics",
                "-fansi-escape-codes",
                "-g",
                "${workspaceFolder}\\*.cpp",
                "-o",
                "${workspaceFolder}\\main.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "compiler: W:\\env\\mingw64\\bin\\clang++.exe"
        },
        {
            "type": "cppbuild",
            "label": "MSVC Compiler",
            "command": "cl.exe",
            "args": [
                "/Zi",
                "/std:c++latest",
                "/EHsc",
                "/nologo",
                "${workspaceFolder}\\*.cpp",
                "/Fe${workspaceFolder}\\main.exe",
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": "build",
            "detail": "compiler: cl.exe"
        }
    ]
}

模板 github地址

https://github.com/wade1010/vscodecppenv

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

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

相关文章

校园进销存网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 功能模块包括&#xff1a;员工模块、手机类型模块、供应商模块、采购模块、客户模块、销售模块、统计模块、库存模块 (1…

2022年的最后一个Win11 Dev预览版本

今日凌晨&#xff0c;微软向广大Win11 Dev用户推送了今年的最后一个版本更新&#xff0c;版本号为25267。根据官方的变化&#xff0c;引入了改变任务栏中可用搜索框样式的设置。此外&#xff0c;此版本还对任务栏、文件资源管理器、设置等进行了各种增强。 该公司还表示&#x…

nacos使用教程及原理简介

一、什么是 Nacos Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos的关键特性包括&#xff1a; 服务发现和服务健康监测动态配置服务动态 DNS 服务服务及其元…

java排序算法

目录 一 冒泡排序 二 选择排序 三 插入排序 四 希尔排序 五 快速排序 5.1 单边循环快速排序 5.2 双边循环快速排序 六 二分查找 七 总结 一 冒泡排序 依次比较数组中相邻的两个元素&#xff0c;若 arr[i] > arr[i1]&#xff0c;则交换两个元素&#xff0c;两两都比…

RabbitMQ原理剖析

常见的消息队列很多&#xff0c;主要包括 RabbitMQ、Kafka、RocketMQ 和 ActiveMQ&#xff0c;本篇文章只讲 RabbitMQ&#xff0c;先讲原理&#xff0c;后搞实战。 直接上思维导图&#xff1a; 1. 消息队列 1.1 消息队列模式 消息队列目前主要 2 种模式&#xff0c;分别为“…

【AI with ML】第 6 章 :使用嵌入使情绪可编程

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

Web安全研究(二)

TChecker: Precise Static Inter-Procedural Analysis for Detecting Taint-Style Vulnerabilities in PHP Applications 香港中文大学&#xff0c;CCS2022 Abstract 由于php语言的高度复杂性&#xff0c;现有的污点分析解决方案由于其不全面的程序间分析和各种实现问题&#…

DIV简单个人静态HTML网页设计作品 WEB静态个人介绍网页模板代码 DW个人网站制作成品 期末网页制作与实现

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

jmeter压测线程5000后内存溢出问题解决

一.报错内容&#xff1a; ava.lang.OutOfMemoryError: Java heap space&#xff1a;意思就是堆内存溢出&#xff0c;不够用了 版本&#xff1a;jmeter5 内存溢出&#xff1a;应用的内存已经不能满足正常使用了&#xff0c;堆栈已经达到系统设置的最大值&#xff0c;进而导致崩…

【图像融合】高斯金字塔+拉普拉斯金字塔彩色水下图像融合【含Matlab源码 1629期】

⛄一、区域分割图像融合简介 图像的分解 对源图像进行融合时,首先对图像进行分解,利用拉普拉斯金字塔分解,先对图像进行高斯金字塔分解,然后再进行拉普拉斯金字塔分解。 1 高斯金字塔分解 记源图像为G0,G0即为高斯金字塔最底层,将其进行高斯低通滤波,之后对其进行隔行隔列的下…

mysqldump实战-问题1

使用mysqldump导出数据时&#xff0c;遇到了一个权限问题(之前没报过这个提示) mysqldump: Error: Access denied; you need (at least one of) the PROCESS privilege(s) for this operation when trying to dump tablespaces 查看当前用户的权限&#xff1a; 解决方法&…

ARM 指令流水线

CPU要执行某一个指令&#xff0c;第一步&#xff0c;PC给内存发送地址&#xff0c;IR接收内存返回的指令&#xff1b;第二步&#xff0c;指令译码器解析IR中的指令&#xff1b;第三步&#xff0c;寄存器执行译码结果对应的运算单元。 实际上&#xff0c;译码器在译码的时候&am…

flutter 基于百度地图的地图选址,包括移动选址,地区搜索 ,仿微信地图选址

flutter 最近有在地图上选择地址的需求&#xff0c;要求如下 1.移动地图获取根据地图中心点获取周边的poi信息 2.搜索&#xff0c;根据搜索内容提示相关地点信息&#xff0c;点击移动到相关位置&#xff0c;显示出该位置周边的poi信息 废话少说&#xff0c;先上视频 flutter…

菜鸟Linux(2):进程优先级与进程状态

"才一年,看着世界变迁,有种沧海桑田" 一、进程调度 与 进程优先级 (1)何为优先级 双击.exe(可执行程序)文件 会发生什么&#xff1f; 但是,当我们使用电脑的时候,不仅仅只会 启动一个程序&#xff01; 系统中一定会有多个 进程同时存在&#xff01; 然而,需求是无…

什么是云手机?云手机的原理是什么?

什么是云手机? 云手机(Cloud Phone)是在云上运行APP的仿真手机。云手机服务根据不同场景提供多种规格的云手机&#xff0c;稳定24小时不间断&#xff0c;全面兼容Android原生APP&#xff0c;流畅运行大型手游&#xff0c;是移动办公好助手。云手机服务为您提供高性能、安全、…

微服务Spring Boot 整合 Redis 实现好友关注 – Feed流实现推送到粉丝收件箱

文章目录⛄引言一、Redis 实现好友关注 -- Feed流实现推送到粉丝收件箱⛅Feed 流实现方案⚡推送到粉丝收件箱三、Redis 实现好友关注 -- 实现分页滚动查询 实时获取信息⛵小结⛄引言 本博文参考 黑马 程序员B站 Redis课程系列 在点评项目中&#xff0c;有这样的需求&#xff…

【正点原子I.MX6U-MINI】删除开机内核Logo和进度条界面Logo

一、编译内核 内核源码1、例程源码-》3、正点原子 Uboot 和 Linux 出厂源码-》linux-imx-4.1.15-2.1.0-g8a006db.tar.bz2。 在 Ubuntu 中新建名为“alientek_linux”的文件夹&#xff0c;然后将 linux-imx-4.1.15-2.1.0-g8a006db.tar.bz2 这个压缩包拷贝到前面新建的 aliente…

Revit中用楼板编辑创建坡道的两种方法

在绘制坡道的时候&#xff0c;有一种两侧带坡度的坡道&#xff0c;一般我们采用楼板编辑的方式来创建。 方法有两种&#xff1a; 第一种是听过添加子图元的点来创建&#xff0c;方法如下&#xff0c; 首先绘制设计所需的楼板尺寸&#xff0c;完成之后点击楼板&#xff0c;形状编…

【Flutter 组件】004-基础组件:图片及 ICON

【Flutter 组件】004-基础组件&#xff1a;图片及 ICON 文章目录【Flutter 组件】004-基础组件&#xff1a;图片及 ICON一、图片1、Image概述Image 的几个构造方法常用属性ImageProvider2、从 asset 中加载图片第一步&#xff1a;准备图片第二步&#xff1a;使用图片第三步&…

9.高性能计算 期末复习

文章目录1.提纲2.第二章 并行硬件&程序设计2.1 SIMD&MIMD2.2 可扩展性2.7 串行程序并行化&#xff08;poster四步&#xff1a;划分、通信、聚合、分配&#xff09;3.mpi2.1 点对点gemm2.2集合通信gemmsend/recv实现reducesend/recv 实现ring AllReduce2.3 加速比2.4 奇…