当前位置: 首页 > news >正文

C++ vscode 开发环境搭建

C++ vscode 开发环境搭建

笔记内容:

  • C++ vscode 开发环境搭建准备
  • 了解g++命令编译调试
  • 掌握使用launch.json和tasks.json配置文件编译调试
  • 了解使用cmake构建

git:
https://github.com/weichangk/hellocpp/tree/master/vscodecmakecpp

环境搭建准备

  • 安装vscode
  • 安装qt,通过Qt在线安装工具可以选择安装cmake(构建工具),mingw64(编译套件)
    Qt安装可以参考:https://blog.csdn.net/qq_39827640/article/details/127411878?spm=1001.2014.3001.5502
    Qt在线安装工具下载:https://download.qt.io/archive/online_installers/4.5/
  • 配置cmake,mingw64环境变量
    • D:\Qt\Tools\CMake_64\bin
    • D:\Qt\Tools\mingw810_64\bin
  • 安装插件
    • C/C++
    • C/C++ Themes
    • C/C++ Extension Pack
    • CMake

创建一个hello World

基于g++命令编译调试

参考:
https://www.runoob.com/w3cnote/cpp-header.html
https://www.runoob.com/w3cnote/gcc-parameter-detail.html
https://blog.csdn.net/Three_dog/article/details/103688043

C++的编译过程

  1. 编译预处理:主要对包含的头文件(#include )和宏定义(#define,#ifdef … )还有注释等进行处理。
    g++ -E test.cpp -o test.ii
    g++ -E main.cpp -o main.ii

  2. 编译:C++ 语法错误的检查,检查无误后,g++ 把代码翻译成汇编语言。
    g++ -S test.ii -o test.s
    g++ -S main.ii -o main.s

  3. 汇编:g++ 汇编阶段:生成目标代码 *.o
    g++ -c test.s -o test.o
    g++ -c main.s -o main.o

  4. g++ 链接阶段:生成可执行文件;Windows下生成.exe
    g++ main.o test.o -o multi.exe

带-g参数生成带调试信息的可执行文件并执行调试

  1. g++编译单文件
    g++ -g main.cpp -o single
    .\single.exe

  2. g++编译多个文件
    g++ -g main.cpp test.h test.cpp -o multi
    .\multi.exe

使用launch.json和tasks.json配置文件启动编译调试

参考:
https://code.visualstudio.com/docs/cpp/config-mingw

.vscode文件夹中文件作用注释:

  • tasks.json (构建指令)
  • launch.json (设置调试器)
  • c_cpp_properties.json (编译器路径和智能感知设置)
  • settings.json
  1. 生成默认的tasks.json文件
    VSCode中Task的使用参考:https://blog.csdn.net/qq_53653262/article/details/120859147
    选择一个cpp文件,打开“终端”菜单“配置默认生成任务”选择“C/C++: g++.exe 生成活动文件”,文件如下:

    {"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: g++.exe 生成活动文件","command": "D:\\Qt\\Tools\\mingw810_64\\bin\\g++.exe","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "编译器: D:\\Qt\\Tools\\mingw810_64\\bin\\g++.exe"}]
    }
    
  2. 生成默认的launch.json文件
    更多内容可参考:https://blog.csdn.net/qq_16587307/article/details/106593867
    点击调试按钮,创建launch.json文件,选择对应的项目或工作区,选择g++.exe生成和调试活动文件,如果没有g++(GDB/LLDB)选项可以将c++插件退回到1.8.4(右键插件安装另一个版本),文件如下:

    {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb) 启动","type": "cppdbg","request": "launch","program": "输入程序名称,例如 ${workspaceFolder}/a.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "/path/to/gdb","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}]}]
    }
    
  3. 修改tasks.json launch.json文件关键参数
    详细参数说明参考:
    https://code.visualstudio.com/docs/cpp/config-mingw

  • tasks.json
    • label
    • command
    • args
    • options cwd
  • launch.json
    • program
    • cwd
    • miDebuggerPath
    • preLaunchTask
  1. 修改后的文件

    //tasks.json
    {"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: g++.exe vscodecmakecpp","command": "D:\\Qt\\Tools\\mingw810_64\\bin\\g++.exe","args": ["-fdiagnostics-color=always","-g","main.cpp","test.cpp","-o","${workspaceFolder}\\src\\${workspaceFolderBasename}.exe"],"options": {"cwd": "${workspaceFolder}\\src"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "编译器: D:\\Qt\\Tools\\mingw810_64\\bin\\g++.exe"}]
    }//launch.json
    {"version": "0.2.0","configurations": [{"name": "(gdb) 启动","type": "cppdbg","request": "launch","program": "${workspaceFolder}\\src\\${workspaceFolderBasename}.exe","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}\\src","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "D:\\Qt\\Tools\\mingw810_64\\bin\\gdb.exe","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "C/C++: g++.exe vscodecmakecpp"//关联tasks.json文件}]
    }
    
  2. tasks.json launch.json之间的关系

  • tasks.json:g++构建指令,可以直接在“终端”选择“运行任务”中选择构建任务执行编译。
  • launch.json:gdb调试器参数,附加tasks.json可以通过vscode执行编译调试并输出调试信息。
  1. c_cpp_properties.json 配置文件作用是:代码提示、代码跳转等
    参考:
    https://blog.csdn.net/fdfdsds/article/details/102248876
    https://blog.csdn.net/weixin_40694527/article/details/84251461

基于cmake编译调试

关于cmake的更多内容参考(后续写关于cmake的学习笔记):
https://cmake.org/documentation/
https://github.com/microsoft/vscode-cmake-tools/blob/main/docs/README.md

添加CMakeLists.txt文件

cmake_minimum_required(VERSION 3.5)
project(vscodecmakecpp LANGUAGES CXX)set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_PREFIX_PATH "d:/Qt/5.15.2/mingw81_64")aux_source_directory(./src SRCS)add_executable(${PROJECT_NAME}${SRCS}
)

CMake:select a kit(如果无选项可以先确保配置环境变量后使用Scan for kits搜索,或重启vscode再搜索再选择)
CMake指令:F7编译、Ctrl + F5调试

使用launch.json结合CMakeLists.txt配置文件进行调试,直接使用vscode F5启动调试
通过修改launch.json文件"program": "${command:cmake.launchTargetPath}“参数使得launch.json使用CMakeLists.txt构建输出文件作为启动目标路径。
删掉"preLaunchTask”: “C/C++: g++.exe vscodecmakecpp” 关联了CMakeLists.txt就不需要关联tasks.json文件了。

相关文章:

C++ vscode 开发环境搭建

C vscode 开发环境搭建 笔记内容: C vscode 开发环境搭建准备了解g命令编译调试掌握使用launch.json和tasks.json配置文件编译调试了解使用cmake构建 git: https://github.com/weichangk/hellocpp/tree/master/vscodecmakecpp 环境搭建准备 安装vscode安装qt&a…...

ANR系列(二)——ANR监听方案之SyncBarrier

前言 在项目中经常遇到了手机假死问题,无规律的偶现问题,大量频繁随机操作后,便会出现假死,整个应用无法操作,不会响应事件,会发生各种奇怪的ANR,且trace不固定。而SyncBarrier是其中的罪魁祸首…...

【完美解决】应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序

年期安装CorelDRAW X8 (64-Bit),安装完成之后运行一点毛病都没有,可是过了两三个月,再打开就出现“应用程序无法正常启动(0xc000007b)请单击“确定”关闭应用程序”这个提示框,如下图示 出现这个问题我就上网查找,无非…...

.NET基础加强第二课--静态成员,静态类

类 实例类 默认是实例类 静态类 在类前加上static ,就是静态类 静态类中,所有包含的成员必须是静态成员 实例成员是属于具体某个对象的 举例代码 Person p1 new Person(); p1.Age 20; p1.Name “张三”; class Person { public string Name { get; set;…...

【UML+OOPC嵌入式C语言开发】使用C语言实现一个面向对象语言才能够实现的类

文章目录简述OOPC开发环境知识讲解函数示例类的实现示例接口实现示例(前面两部分有点无聊,如果大家没兴趣看可以直接从知识讲解开始看) 简述OOPC oopc,是一种轻量级的面向对象的C语言编程框架, LW_OOPC是Light-Weight …...

软件测试自动化Java篇【Selenium+Junit 5】

文章目录Selenium环境部署自动化测试例子常见的元素操作窗口等待浏览器的操作弹窗选择器执行脚本文件上传浏览器参数Junit 5导入依赖Junit 4 和 Junit5 注解对比断言测试顺序参数化单参数多参数动态参数测试套件指定类来运行测试用例指定包名来运行包下测试用例Selenium 为什么…...

Clip:学习笔记

Clip 文章目录Clip前言一、原理1.1 摘要1.2 引言1.3 方法1.4 实验1.4.1 zero-shot Transfer1.4.2 PROMPT ENGINEERING AND ENSEMBLING1.5 局限性二、总结前言 阅读论文: Learning Transferable Visual Models From Natural Language Supervision CLIP 论文逐段精读…...

STM32CubexMX与FreeRTOS学习

目录 LED与EXTI配置 基本定时器使用 软件定时器 在HAL库中实现printf 重点--记得自己添加头文件 队列实现 二值信号量实现 计数信号量实现 DMA实现 ADC配置 RTC配置 看门狗 窗口看门狗 FreeRTOS结合MX软件开发,基础配置直接生成,我们只…...

Master Slave 主从同步错误 Slave_IO_Running:NO/Slave_SQL_Running: No

Master Slave 主从同步错误 Slave_IO_Running:NO Slave_SQL_Running:Yes #在Slave库上查看状态 mysql> show slave status\G Slave_IO_Running: No Slave_SQL_Running: Yes #重启master库:service mysqld restart mysql> show master status; ------------…...

JavaScript函数之prototype原型和原型链

文章目录1. 原型2. 显式和隐式原型3. 原型链3.1 访问顺序4. instanceof4.1 如何判断1. 原型 函数的prototype属性 每个函数都有一个prototype属性,它默认指向一个Object空对象(即:原型对象)。原型对象中有一个属性constructor&a…...

从上海分时电价机制调整看转供电用户电能计费

安科瑞 耿敏花2022年12月16日,上海市发改委发布《关于进一步完善我市分时电价机制有关事项的通知》(沪发改价管〔2022〕50号)。通知明确上海分时电价机制,一般工商业及其他两部制、大工业两部制用电夏季(7、8、9月)和冬季&#xf…...

TypeScript类型体操:获取数组中元素对象属性的值作为新类型

title: TypeScript类型体操:获取数组中元素对象属性的值作为新类型 date: 2023-03-03 20:58:24 categories: TypeScript类型体操 tags: TypeScript类型体操TypeScript 首先先说获取数组中元素对象属性的值作为新类型的解决方案 使用 as const 强调不可变数组使用 …...

npm,yarn和pnpm

npm扁平的node_modules结构比如项目依赖了A 和 C,而 A 和 C 依赖了不同版本的 B1.0 和 B2.0,D也依赖B1.0, node_modules 结构如下:node_modules ├── A1.0.0 ├── B1.0.0 └── C1.0.0└── node_modules└── B2.0.0C依赖的B2.0因为版…...

【算法】【数组与矩阵模块】在排好序的矩阵中找数,时间复杂度O(M+N)

目录前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本思考感悟写在最后前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 问题介绍 …...

【Java|基础篇】计算机中数据的存储规则

文章目录前言:1.计算机中的数据2.二进制的介绍二进制的运算规则常见的进制3.字符的存储4.汉字的存储5.图片的存储6.音频的存储总结:前言: 本篇文章只是为了科普 计算机中数据的存储规则 1.计算机中的数据 计算机的数据大致分为三类:文本数据,图片和音频 注:视频是图片和音频…...

RestTemplate使用HttpClient连接池

文章目录RestTemplate使用HttpClient连接池ClientHttpRequestFactorySimpleClientHttpRequestFactorySimpleClientHttpRequestFactory 设置超时时间HttpURLConnection的缺点HttpComponentsClientHttpRequestFactoryPoolingHttpClientConnectionManager配置连接池HttpClient总结…...

Python 操作Redis

在 Python中我们使用 redis库来操作 Redis数据库。Redis数据库的使用命令这里就不介绍了。 需要安装 redis库。检查是否安装redis: pip redis 如果未安装,使用 pip命令安装 redis。 pip install redis #安装最新版本 一、Redis连接 Redis提供两个类 Re…...

CEC2020:鱼鹰优化算法(Osprey optimization algorithm,OOA)求解CEC2020(提供MATLAB代码

一、鱼鹰优化算法简介 鱼鹰优化算法(Osprey optimization algorithm,OOA)由Mohammad Dehghani 和 Pavel Trojovsk于2023年提出,其模拟鱼鹰的捕食行为。 鱼鹰是鹰形目、鹗科、鹗属的仅有的一种中型猛禽。雌雄相似。体长51-64厘米…...

词对齐 - MGIZA++

文章目录关于 MGIZAgiza-py安装 MGIZA命令说明mkclsd4normhmmnormplain2sntsnt2coocsnt2coocrmpsnt2plainsymalmgizageneral parameters:No. of iterations:parameter for various heuristics in GIZA for efficient training:parameters for describing the type and amount o…...

GUI 之 Tkinter编程

GUI 图形界面,Tkinter 是 Python 内置的 GUI 库,IDLE 就是 Tkinter 设计的。 1. Tkinter 之初体验 import tkinter as tkroot tk.Tk() # 创建一个窗口root.title(窗口标题)# 添加 label 组件 theLabel tk.Label(root, text文本内容) theLabel.p…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...