信息学奥赛之MAC端VSCode C++环境配置

前提

  1. 安装 Visual Studio Code
  2. VSCode 中安装 C/C++扩展
    在这里插入图片描述
  3. 确保 Clang 已经安装(在终端中输入命令:clang --version 来确认是否安装)
  4. 未安装,在命令行执行xcode-select --install 命令,会自行安装,安装文件有点大

  5.  

创建你的第一个 HelloWorld 程序


创建工作区(WorkSpace)
打开 VSCode, 创建一个 project 文件夹。

现在,project 就是我们的工作区(WorkSpace)了。当我们继续做完本教程的配置,这个工作区中将出现一个子文件夹.vscode,包含三个文件。
● tasks.json(编译选项设置)
 

创建 HelloWorld 的源代码文件


在 project 文件夹下创建一个 hello.cpp 文件

在 hello.cpp中粘贴以下内容

#include <iostream>using namespace std;int main(){cout << "Hello World" << endl;
}


Command+S(⌘S)保存该文件,

运行 HelloWorld(compile and run)


注意:C++扩展是使用机器上已安装的 C++编译器来生成程序,所以在运行/调试 hello.cpp 前,请确保你已经符合了文章开头的前提,安装好了 C++编译器。

打开 hello.cpp,这将它将成为 active file,可以被用于生成和调试
点击图中右上角的按钮,选择 Run C/C++ File

在跳出的选项中,选择C/C++: clang++ build and debug active file。

只有在第一次运行 hello.cpp 时才需要做这个选择。选择后,.vscode 文件夹中出现了一个新文件tasks.json,我们选择的编译器配置将作为默认设置。
编译成功后,程序的输出将显示在下方的 DEBUG CONSOLE

至此,我们已经成功地运行了 VS Code 上的第一个 C++程序!
  

几大主流 C++ 编译器(ICC / GCC / Clang / VC++)

gcc/g++ 和 clang/clang++ 都是 Linux 下常用的 C/C++ 编译器。gcc 是 GNU 亲儿子,Ubuntu 等常用发行版标配。clang 是后起之秀,配合 llvm,以优秀的前端闻名于世,现在已经是 Mac(XCode) 的默认编译器,微软等大公司都在往上靠,前景一片光明。知乎上对几个主流编译器的评价:

在标准支持方面,clang > g++ > vc > icc。从实际使用来看,非常取决于平台。比如win上vc最好,osx上clang最好,等。其他特点还有icc编译出来的东西在intel cpu上快。

clang/g++需要注意的是,他们的编译器对标准支持很好,但库的支持严重不行。以至于如果你要C++11/C++14,还是会打折扣的。另外,clang在win上简直是没有见过更屎的。

对于vc来说,编译速度这几代在一直提高,内存占用从vc12开始有明显改进,最明显的是Variadic template。还有内置的代码静态分析,在实际中很有用。vc14的静态分析不在每次载入一个ie(对,以前每分析一个.cpp,就载入一次ie!),速度快了相当多。

对我自己而言,优先级是clang>g++>msvc。

注:GNU是一个操作系统,其内容软件完全以GPL方式发布。这个操作系统是GNU计划的主要目标,名称来自GNU's Not Unix!的递归缩写,因为GNU的设计类似Unix,但它不包含具著作权的Unix代码。GNU的创始人,理查德·马修·斯托曼,将GNU视为“达成社会目的技术方法”。
 

修改 tasks.json

修改了文件组织形式后,存储了编译配置的 tasks.json 也需要做对应修改。
第一次编译运行 hello.cpp 时,我的机器上生成的 tasks.json 如下:

{"tasks": [{"type": "cppbuild","label": "C/C++: clang++ build active file","command": "/usr/bin/clang++","args": ["-fcolor-diagnostics","-fansi-escape-codes","-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "Task generated by Debugger."}],"version": "2.0.0"
}

我们做如下两个修改:

工程中往往需要一次性编译选定路径下的所有 cpp 文件。对应的,把"args"中的:"${file}"改为"${fileDirname}/*.cpp"  如果不想一次编译所有文件可以不修改
我们希望把编译出的文件统一放置在 target 文件夹下。对应的,把"args"中的"${fileDirname}/${fileBasenameNoExtension}"改为"${workspaceFolder}/target/${fileBasenameNoExtension}"

修改工程文件结构

增加三个子文件夹 includesrctarget,并把 hello.cpp 移动到 src 目录下。

然后我们做下测试,看看修改后的工作区可否正常编译运行 hello.cpp

验证配置的正确性

在 include 中创建 print.h,粘贴如下内容:

#include <iostream>
#include <vector>
#include <string>
using namespace std;void printMessage(vector<string>& msg);

 在 src 中创建 print.cpp,粘贴如下内容:

#include "../include/print.h"void printMessage(vector<string> &msg)
{for (int i = 0; i < msg.size(); i ++){cout << msg[i] << " ";}
}

修改 src 下的 hello.cpp,粘贴如下内容:

#include "../include/print.h"int main(){vector<string> msg;msg.push_back("Hello"); msg.push_back("World");printMessage(msg);
}

 
在 hello.cpp 中点击右上角的 run 按钮,可以看到也成功运行了(这说明我们实现了一次性编译多个 cpp 文件),而且目标文件生成到了 target 下。

 

cin命令无法输入

解决方法
(有多种解决方法,这里选择我认为最易于进行的方法)

Step1:下载相关插件(这一步简单带过)

安装CodeLLDB的扩展插件。

Step2:生成可执行文件

直接点击vscode右上角的运行按钮。

 

在命令行就可以输入了。

debug调试仍然不行需要修改配置

调试(修改launch.json文件)

可以看到在当前目录下多了.vscode文件夹,并且自动创建了launch.json文件。(这个时候直接进行调试会报错/仍然无法处理输入问题)

这里我们需要修改两个地方:

1、使用集成终端来运行和调试程序:增加 “terminal”: “integrated”, 如果type不是就改为lldb,例:"type":"lldb"

2、运行当前文件所在目录下的同名可执行文件:修改program属性为:“${workspaceFolder}/${fileBasenameNoExtension},需求注意的是先选中要运行的c++文件,然后再点击调试就可以运行成功,否则会提示文件找不到

至此,修改完成。

先运行Run Code,然后运行《运行调试c/c++文件》,再调试就可以输入了。不能直接点击《运行调试c/c++文件》,直接点击依然没有输入的地方。

直接点击需要修改配置,直接点击使用的是插件的调试插件,如下,需要安装xcode,对xcode版本有要求

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "clang++ build and debug active file","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"miDebuggerPath": "/Applications/Xcode.app/Contents/Developer/usr/bin/lldb-mi","MIMode": "lldb","preLaunchTask": "clang++ build active file"}]
}

codeLLdb插件安装不了的解决方法

下载codeLLdb

codeLLdb下载地址
打开vscode后选择 扩展->视图和更多操作->从VSIX安装
在这里插入图片描述

选择下载的插件文件

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

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

相关文章

如何将OpenCV Java 与Eclipse结合使用

返回目录&#xff1a;OpenCV系列文章目录 上一篇&#xff1a;OpenCV-Java 开发简介 下一篇&#xff1a;使用 Clojure 进行 OpenCV 开发简介 正文&#xff1a; 警告&#xff1a;本教程可以包含过时的信息。 从 2.4.4 版本开始&#xff0c;OpenCV 支持 Java。在本教程中&…

力扣454. 四数相加 II

思路&#xff1a;把四个数组拆成两对&#xff0c;两个分别相加&#xff0c;记录第一对的相加结果进map里&#xff0c;再把第二对数组 0-nums2-nums4 去map里面找出现了几次&#xff0c;这题不用对重复的四元组去重&#xff0c;所以出现多次都有效。 class Solution {public int…

vue3+ts+vite axios封装请求并扩展入参

requset.ts import axios, { AxiosResponse } from axios import { getToken, removeToken } from /utils/auth// 创建axios实例 const service axios.create({baseURL: , // 所有的请求地址前缀部分(没有后端请求不用写)timeout: 60000 // 请求超时时间(毫秒)// withCredent…

MySQL Workbench连接云服务器内网数据库

在项目上遇到一个问题&#xff0c;生产环境是Centos&#xff0c;分配了两台云服务器&#xff0c;一台应用服务&#xff0c;一台数据库服务&#xff0c;应用服务与数据库服务采用内网连接。我作为开发和运维方&#xff0c;有权限直接访问应用服务&#xff0c;但是数据库服务器需…

“低代码+平台”:驱动企业数字化转型与创新的新引擎

“低代码平台”作为一种新兴的软件开发范式&#xff0c;正逐渐成为企业快速响应市场变化、优化业务流程、提升数字化水平的重要手段。它的价值在于&#xff0c;将传统软件开发的复杂性大大降低&#xff0c;赋予了非技术人员或轻量级开发者快速构建应用的能力&#xff0c;并能灵…

Flink实战之FlinkSQL键设计对于数据保序的必要性

乱序数据处理对于实时ETL至关重要&#xff0c;处理不好将会导致数据不一致场景发生。对于数据乱序场景&#xff0c;一般工程师已知上游数据乱序会对本身消费数据产生影响&#xff0c;但不一定晓得的是&#xff0c;一个SQL本身也可能造成数据乱序&#xff0c;严格意义上的数据乱…

优思学院|APQP产品质量先期策划全面指南

产品质量先期策划&#xff08;APQP&#xff09;是什么&#xff1f; 产品质量先期策划&#xff08;APQP&#xff09;是针对复杂产品和供应链在推出新产品时存在的众多失败可能性&#xff0c;目的在于确保新产品或新流程能够获得客户满意的一种结构化过程。 在复杂的产品和供应…

硬盘哨兵Hard Disk Sentinel Pro V6.20.0.0 便携版

Hard Disk Sentinel 是一款功能强大的硬盘监控和分析软件&#xff0c;专为 Windows 用户设计。它可以实时监测硬盘驱动器&#xff08;HDD&#xff09;、固态硬盘&#xff08;SSD&#xff09;、混合硬盘&#xff08;SSHD&#xff09;、NVMe SSD、RAID 数组和外部 RAID 盒子的健康…

马斯克开源Grok-1

Grok-1是由马斯克AI创企xAI发布的第一代大语言模型&#xff0c;它以其巨大的参数量——高达3140亿&#xff0c;引起了全球范围内的广泛关注。这一参数量远超其他知名模型&#xff0c;如OpenAI的GPT-3.5&#xff0c;后者仅有1750亿参数。在2024年3月17日&#xff0c;马斯克宣布将…

一图看懂伙伴系统 Buddy System

伙伴系统是一种在操作系统内核中使用的管理物理内存的算法。它主要应用于现代计算机系统中&#xff0c;特别是在Linux等类Unix系统中。 基本思想&#xff1a;将物理内存分割成不同大小的块&#xff0c;每个块包含一定数量的连续页面。这些块的大小通常是2的幂次方&#xff0c;…

【GPT-SOVITS-04】SOVITS 模块-鉴别模型解析

说明&#xff1a;该系列文章从本人知乎账号迁入&#xff0c;主要原因是知乎图片附件过于模糊。 知乎专栏地址&#xff1a; 语音生成专栏 系列文章地址&#xff1a; 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

使用CUDA 为Tegra构建OpenCV

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;MultiArch与Ubuntu/Debian 的交叉编译 下一篇&#xff1a;在iOS中安装 警告&#xff1a; 本教程可能包含过时的信息。 使用CUDA for Tegra 的OpenCV 本文档是构建支持 CUD…

Expert Prompting-引导LLM成为杰出专家

ExpertPrompting: Instructing Large Language Models to be Distinguished Experts 如果适当设计提示&#xff0c;对齐的大型语言模型&#xff08;LLM&#xff09;的回答质量可以显著提高。在本文中&#xff0c;我们提出了ExpertPrompting&#xff0c;以激发LLM作为杰出专家回…

vivado 增量实施

增量实施 增量实现是指增量编译的实现阶段设计流程&#xff1a; •通过重用参考设计中的先前布局和布线&#xff0c;保持QoR的可预测性。 •加快地点和路线的编制时间或尝试最后一英里的计时关闭。 下图提供了增量实现设计流程图。该图还说明了增量合成流程。有关增量的更多…

SLAM 求解IPC算法

基础知识&#xff1a;方差&#xff0c;协方差&#xff0c;协方差矩阵 方差&#xff1a;描述了一组随机变量的离散程度 方差 每个样本值 与 全部样本的平均值 相差的平方和 再求平均数&#xff0c;记作&#xff1a; 例如&#xff1a;计算数字1-5的方差&#xff0c;如下 去中心化…

关系型数据库mysql(3)索引

目录 一.索引的概念 二.索引的作用 三.创建索引的原则依据 四.索引的分类 五.索引的创建 5.1 普通索引 5.1.1 直接创建索引 5.1.2 修改表方式创建 5.1.3 创建表的时候指定索引 5.2 唯一索引 5.2.1 直接创建唯一索引 5.2.2 修改表方式创建 5.2.3 创建表的时候指…

ThreaTrace复现记录

1. 环境配置 服务器环境 需要10.2的cuda版本 conda环境 包的版本&#xff1a; python 3.6.13 pytorch 1.9.1 torch-cluster 1.5.9 torch-scatter 2.0.9 torch-sparse 0.6.12 torch-spline-conv 1.2.1 torch-geometric 1.4.3 环境bug 这里环境搭建好以后&#xff0c;就可以正…

osgEarth学习笔记2-第一个Osg QT程序

原文链接 上个帖子介绍了osgEarth开发环境的安装。本帖介绍我的第一个Osg QT程序。 下载 https://github.com/openscenegraph/osgQt 解压&#xff0c;建立build目录。 使用Cmake-GUI Configure 根据需要选择win32或者x64&#xff0c;这里我使用win32. 可以看到include和lib路…

jQuery 基础

文章目录 1. jQuery 概述1.1 JavaScript 库1.2 jQuery 概念1.3 jQuery 优点 2. jQuery 基本使用2.1 下载2.2 使用步骤2.3 jQuery 的入口函数2.4 jQuery 的顶级对象 $2.5 DOM 对象和 jQuery 对象DOM 对象和 jQuery 对象相互转换方法 1. jQuery 概述 1.1 JavaScript 库 1.2 jQue…

Cesium:按行列绘制3DTiles的等分线

作者:CSDN @ _乐多_ 本文将介绍如何使用 Cesium 引擎根据模型的中心坐标,半轴信息,绘制 3DTiles 对象的外包盒等分线。 外包盒是一个定向包围盒(Oriented Bounding Box),它由一个中心点(center)和一个包含半轴(halfAxes)组成。半轴由一个3x3的矩阵表示,这个矩阵是…