vscode+msys2+clang+xmake c++开发环境搭建
转载请标明出处:小帆的帆的专栏
安装msys2
- 下载msys2安装包:清华源下载地址
- 安装msys2:安装目录,
C:\Softwares\msys64
安装cling工具链,xmake
!!!在开始菜单中启动MSYS2 CLANG64
, 而不是UCRT
(安装后默认启动的是UCRT)
确保下图红圈中是CLANG64
下面的命令都在msys clang命令终端
中完成,依次是配置清华源
,安装clang工具链
、安装xmake
配置清华源
- 修改源
sed -i "s#https\?://mirror.msys2.org/#https://mirrors.tuna.tsinghua.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*
- 同步包数据库
pacman -Syu
安装clang工具链
pacman -S mingw-w64-clang-x86_64-toolchain
安装xmake
这里使用命令行安装,会自动配置代码提示。其他安装方法参考xmake官方安装教程,请确保安装完后得到一个全局可执行xmake。
注意:不要在msys cling64中安装,装完vscode-xmake插件在使用xmake: CreateProject时会报错。
关闭msys cling64
命令行,以管理员模式
启动一个PowerShell,执行下面的安装命令
Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content
安装完成后接着执行下面的命令,否则会报权限错误
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
安装vscode
- 安装vscode
- 安装git,xmake下载包时会用到
- 安装vscode插件xmake
- 安装vscode插件CodeLLDB,安装过程中遇到网络问题参考此文手动安装
- 安装vscode插件clangd
运行并调试HelloWorld项目
创建HelloWorld项目
现在我们有一个全局的xmake命令,和vscode-xmake插件,就可以在vscode中创建项目了。
- 创建一个项目文件夹
- 用vscode打开
Ctrl + Shift + P
打开命令面板,然后输入xmake create,选择Xmake: CreateProject,然后依次选择c++,console
得到了一个空项目
配置运行项目
Ctrl + Shift + P
,然后输入xmake config,选择XMake: Configure
到这里还没有执行clang的路径,就会报错。
看控制台第一行,当执行XMake: Configure,就是执行了这个命令
xmake f -p windows -a x64 -m debug
这个命令的意思是用xmake在windows平台用x64架构以debug模式编译。
具体可以通过xmake --help
命令查看
f : 是config
-p windows: 是windows平台
-a x64 :是x64架构
-m debug :是debug模式
这里要说明两个名词:
- 平台:windows,linux,mingw,msys等是平台。
- 工具链:clang,gcc,msvc等是工具链。
例如:在windows上同时装clang和gcc,然后又在msys上装了clang,所以当指定工具链就要说是哪个平台的哪个工具链。
平台和工具链可以在vscode下方的xmake工具栏中查看和修改。
在xmake工具栏中修改平台为msys,架构为x86_64,模式为debug,然后再运行XMake: Configure错误还在。
原因是系统中还没有指定clang工具链的路径,平台指定了msys,但是xmake还是不知道clang工具链在哪。可以通过配置环境变量解决。
配置环境变量有两个选择,推荐使用方法1:
- 添加系统环境变量,然后关闭所有vscode窗口,重启。
# 添加此环境变量到用户或系统均可
C:\Softwares\msys64\clang64\bin
- 设置vscode项目环境变量,然后关闭vscode中的终端再打开,
不推荐使用
,不同的插件都要指定环境变量,很容易莫名报错,在xmake引入包的情况下断点调试也会报错。
vscode设置环境变量的方法如下:
在vscode中修改.vscode/settings.json
{// 终端环境变量"terminal.integrated.env.windows": {"PATH": "${env:PATH};C:\\Softwares\\msys64\\clang64\\bin;"}// 调试插件CodeLLDB环境变量"lldb.launch.env": {"PATH": "${env:PATH};C:\\Softwares\\msys64\\clang64\\bin;"}// clangd命令路径// !!!!!!!!!!!!!必须加.exe!!!!!!!!!!!!!!!"clangd.path": "C:\\Softwares\\msys64\\clang64\\bin\\clangd.exe"
}
配置完成后再运行XMake: Configure就没有错误了。
然后点击XMake工具栏中的Build和运行,就打印hello world了
断点调试项目
调试时确保XMake工具栏显示时debug模式,并成功编译,直接点击XMake工具栏中的调试,会在命令行中以命令的方式触发调试
在.vscode/settings.json中添加
{// ...省略"xmake.debugConfigType": "codelldb", // 使用 codelldb 插件调试// ...
}
添加断点后,点击XMake工具栏中的调试按钮,断点就上来了。
配置clangd
点击XMake工具栏中的clangd,搜索Failed会发现有一个条错误,编译数据库载入失败。
原因是未指定compile_commands.json的路径,它在.vscode目录下。
通过修改.vscode/settings.json指定路径
{"clangd.arguments": [// 编译数据库(compile_commands.json 文件)的目录位置"--compile-commands-dir=${workspaceFolder}/.vscode", ]
}
指定完成之后还是不行,因为这时compile_commands.json的内容是空的
生成内容的方法有多种,具体查看官方文档生成compile_commands
这里通过保存xmake.lua的方法实现:
- 鼠标点击xmake.lua文件中任意位置,无需修改
- 直接Ctrl + S保存文件
- compile_commands.json就会生成
- 生成compile_commands.json内容的前提是,build成功,helloworld.exe存在。
生成完成后,重启vscode或者命令面板中运行clangd: Restart language server,再看clangd的日志就成功加载编译数据库了。
配置成功后,鼠标放在代码上就会有弹出信息。
xmake包管理
通过xmake添加三方库,这里以fmt为例。
- 修改helloworld.app
#include <fmt/format.h>int main(int argc, char** argv)
{fmt::print("hello world!\n");return 0;
}
修改完成后fmt报红
- 添加fmt包
修改xmake.lua,添加fmt包,修改2处
add_rules("mode.debug", "mode.release")-- 修改1
add_requires("fmt")target("Hello world!")set_kind("binary")add_files("src/*.cpp")-- 修改2add_packages("fmt")
target_end()
- 在命令面板中运行XMake: Configure
可能会发生网络错误,可尝试配置vscode终端代理,再重新运行
配置方法,修改.vscode/settings.json
{"terminal.integrated.env.windows": {"http_proxy": "http://127.0.0.1:7890","https_proxy": "http://127.0.0.1:7890"},
}
- 解决cmake错误
成功下载包后在安装时会包CMAKE_MAKE_PROGRAM is not set
虽然安装fmt时xmake有安装cmake,但还是报错了。
解决办法有两步:
- 在
msys clang64
环境中安装cmake
pacman -S mingw-w64-clang-x86_64-cmake
- 在环境变量中添加
CMAKE_GENERATOR=Ninja
再运行XMake: Configure就配置成功了。
- 构建运行
fmt包输出hello world
但是看代码还是一片红,接下来解决这个问题。
vscode中xmake引入的包找不到
修改xmake.lua,添加set_toolchains("clang")
,然后重启vscode,就好了。
add_rules("mode.debug", "mode.release")
-- 修改1
set_toolchains("clang")
add_requires("fmt")target("helloworld")set_kind("binary")add_files("src/*.cpp")add_packages("fmt")
target_end()
成功后链接的是xmake仓库
参考
MSYS2 + VSCode 搭建 C/C++ 开发环境_哔哩哔哩_bilibili
VSCode + MSYS2 + Clang + Clangd + Xmake 配置优雅的 Windows C++ 开发环境 | 璜珀的小屋
[万字长文]Visual Studio Code 配置 C/C++ 开发环境的最佳实践(VSCode + Clangd + XMake) - 知乎
几乎无痛的VSCode+clangd+lldb+cmake配置C/C++开发环境指南 - 知乎
xmake从入门到精通8:切换编译模式 - waruqi - 博客园
msys2软件包管理工具pacman常用命令_msys2 pacman-CSDN博客
What is clangd?
相关文章:
vscode+msys2+clang+xmake c++开发环境搭建
转载请标明出处:小帆的帆的专栏 安装msys2 下载msys2安装包:清华源下载地址安装msys2:安装目录,C:\Softwares\msys64 安装cling工具链,xmake !!!在开始菜单中启动MSYS2 CLANG64,…...
Python面试常见问题及答案5
一、基础语法相关 问题1: Python的可变数据类型和不可变数据类型有哪些? 答案: 在Python中,可变数据类型有列表(list)、字典(dict)、集合(set)。这些数据类型…...
威联通docker无法拉取镜像
链接:威联通TS-464C 折腾--Container Station国内无法拉取镜像_docker_wangguanghe-开放原子开发者工作坊我这里用的是IPV6 ,没有公网资源啊。 wangguanghe...
3D 生成重建034-NerfDiff借助扩散模型直接生成nerf
3D 生成重建034-NerfDiff借助扩散模型直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 感觉这个论文可能能shapE差不多同时期工作,但是shapE是生成任意种类。 本文提出了一种新颖的单图像视图合成方法NerfDiff,该方法利用神经辐射场 …...
ASP.net Core EntityFramework Code EF code 汇总
Entity FrameWork EF 总结 EF Core EF Core 如果实体模型很多,全部放在 上下文中的 OnModelCreating(ModelBuilder modelBuilder) 不太好维护 可以把实体模型 分离出去,每个类创建一个实体模型 public class BookConfiguration :IEntityT…...
AtCoder Beginner Contest 384 Solution
文章目录 ABCDEFG A void solve() {string s; char x, y;qr(n, x, y, s);for(auto i: s) {if(i ! x) i y;cout << i;} }B void solve() {qr(n, m);for (int i 1; i < n; i) {int x, y;qr(x, y);x--;if(1600 - x * 400 < m && m < 2799 - x * 400) m…...
c# TaskScheduler
这里记录下 TaskScheduler 的简单用法。 使用场景: 使用 Task 的时候,大家知道用 TaskFactory.StartNew 可以用来创建一个 Task 。这里如果创建了 3 个,那么这3个 Task 就各自放飞直接运行了。 class Program {private static TaskFactory…...
FFMPEG视频转图片
用FFMPEG视频转图片,并且for循环 import os import subprocess# 输入文件夹和输出文件夹路径 input_folder r"I:\xxx" output_base_folder r"D:\xxx\YOLO\data\video" output_subfolder_name "20240609"# 创建输出子文件夹 output…...
激活函数-swiGLU
swiGLU(Switch Gated Linear Unit)简介 swiGLU 是一种改进的激活函数模块,主要用于深度学习中的 Transformer 模型和其他神经网络架构。它在 GLU(Gated Linear Unit) 的基础上进行了修改,以提升模型的表现…...
PCIe学习笔记
PCIE高速串行数据总线 当拿到一块板子 比如你要用到PCIE 首先要看这块板子的原理图 一般原理图写的是 PCI express 表示PCIE 以下是Netfpga为例下的PCIE插口元件原理图 ——PMT简介
一、引言 PMT(Program Map Table)与PAT表成对出现,其PID由PAT表给出。通过PMT表可以得到该节目包含的视频和音频信息,从而找到音视频流: 二、PMT表中的属性 根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第79页&#x…...
2024小迪安全信息收集第三课
目录 一、Web应用-架构分析-WAF&蜜罐识别 二、Web应用-架构分析-框架组件指纹识别 #Web架构 开源CMS 前端技术 开发语言 框架组件 Web服务器 应用服务器 数据库类型 操作系统信息 应用服务信息 CDN信息 WAF信息 蜜罐信息 其他组件信息 #指纹识别 #WAF识别…...
ESP32-C3 入门笔记07: ESP-NOW动态绑定MAC地址. (ESP-IDF + VSCode)
ESP-NOW 简介 ESP-NOW [gitbuh] ESP-NOW 是一种由乐鑫公司定义的无连接 Wi-Fi 通信协议。在 ESP-NOW 中,应用程序数据被封装在各个供应商的动作帧中,然后在无连接的情况下,从一个 Wi-Fi 设备传输到另一个 Wi-Fi 设备。 CTR 与 CBC-MAC 协…...
Windows如何安装go环境,离线安装beego
一、安装go 1、下载go All releases - The Go Programming Language 通过网盘分享的文件:分享的文件 链接: https://pan.baidu.com/s/1MCbo3k3otSoVdmIR4mpPiQ 提取码: hxgf 下载amd64.zip文件,然后解压到指定的路径 2、配置环境变量 需要新建两个环境…...
【Unity技巧】如何设置屏幕最小宽度
在 Unity 中,设置屏幕最小宽度可以通过调整 Canvas 的 CanvasScaler 组件来控制 UI 元素的缩放,并确保 UI 在不同屏幕宽度下始终能保持适当的布局。 不过,如果你想要限制游戏的实际窗口宽度,通常是通过代码来实现的。例如&#x…...
【新版】阿里云ACP云计算题库及答案解析
阿里云ACO云计算考试提醒都是选择题,70道单选题30道单选题,聪明的小伙伴都知道刷题备考加深记忆,给大家分享一波阿里云ACP云计算题库及答案,希望对大家顺利拿到阿里云ACP云计算高级工程师证书有所帮助! 1、设计云上架…...
【蓝桥杯每日一题】推导部分和——带权并查集
推导部分和 2024-12-11 蓝桥杯每日一题 推导部分和 带权并查集 题目大意 对于一个长度为 ( N ) 的整数数列 A 1 , A 2 , ⋯ , A N A_1, A_2, \cdots, A_N A1,A2,⋯,AN ,小蓝想知道下标 ( l ) 到 ( r ) 的部分和 ∑ i l r A i A l A l 1 ⋯ A r \sum_{…...
【Linux服务器nginx前端部署详解】ubantu22.04,前端Vue项目dist打包
本文主要讲一下在Linux系统环境下(以ubantu22.04为例),如何用nginx部署前端Vue项目打包的dist静态资源。有些具体的命令就不展开讲了,可以自行查看其他博主的文章,我主要讲整体的步骤和思路。 一、ubantu系统安装ngin…...
Groovy 语法快速入门
文章目录 1. Groovy 的特点2. 基本语法2.1. 变量2.2. 字符串2.3. 条件语句 3. 集合操作3.1. 列表(List)3.2. 映射(Map) 4. 循环语句4.1. 普通循环4.2. 闭包遍历 5. 方法定义6. 闭包(Closure)6.1. 定义与调用…...
vue3 Textarea在光标定位处,增加一定的关键词。
1、经常碰到这种情况,有一些是系统预留的关键词可以选择,当用户把光标定位到什么地方,我们就要在这个位置插入指定的关键词。 2、光标定位在今天的前面,那么我们点击【逗号】按钮,在这个位置增加一个逗号。 3、代码&…...
硬件设计-电源轨噪声对时钟抖动的影响
目录 定义 实际案例 总结 定义 首先了解抖动的定义,在ITU-T G.701中有关抖动的定义如下: 数字信号重要瞬间相对于其理想时间位置的短期非累积变化。 抖动是时钟或数据信号时序的短期时域变化。抖动包括信号周期、频率、相位、占空比或其他一些定时特…...
Graspness 端到端抓取点估计 | 环境搭建 | 模型推理测试
在复杂场景中实现抓取检测,Graspness是一种端到端的方法; 输入点云数据,输出抓取角度、抓取深度、夹具宽度等信息。 开源地址:https://github.com/rhett-chen/graspness_implementation?tabreadme-ov-file 论文地址࿱…...
大模型呼入机器人的缺点是什么?(转)
大模型呼入机器人的缺点是什么?(转) 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/FreeIPCC/FreeIPCC 大模型呼入机器人在提供高效、自动化服务的同时,也存在一些缺点。以下是对其缺点的详细归纳&#…...
ASP.NET |日常开发中连接Oracle数据库详解
ASP.NET |日常开发中连接Oracle数据库详解 前言一、安装和配置 Oracle 数据访问组件1.1 安装ODP.NET(Oracle Data Provider for.NET):1.2 引用相关程序集: 二、配置连接字符串2.1 连接字符串的基本组成部分:…...
Kaggler日志-Day4
进度24/12/14 昨日复盘: Pandas课程完成 Intermediate Mechine Learning2/7 今日记录: Intermediate Mechine Learning之类型变量 读两篇讲解如何提问的文章,在提问区里发起一次提问 实战:自己从头到尾首先Housing Prices Compe…...
onnx算子的注册详解及案例 (完整版)
文章目录 1. 介绍1.1 导出onnx不成功1.2 分析和解决方案2. 案例2.1 Asinh算子注册2.1.1 导出onnx2.1.2 算子注册2.2 自定义算子的注册2.1 直接导出自定义算子2.2 自定义算子的注册并导出2.3 导出带deformable conv 的onnx2.3.1 直接导出deformable conv2.3.2 注册并导出deforma…...
2024生命科学前沿技术
前沿技术是指高技术领域中具有前瞻性、先导性和探索性的重大技术,是未来高技术更新换代和新兴产业发展的重要基础,是国家高技术创新能力的综合体现。选择前沿技术的主要原则一是代表世界高技术前沿的发展方向。二是对国家未来新兴产业的形成和发展具有引…...
游戏引擎学习第47天
仓库: https://gitee.com/mrxiao_com/2d_game 昨天我们花了一点时间来修复一个问题,但基本上是在修复这个问题的过程中,我们决定添加一个功能,那就是在屏幕上控制多个实体。所以如果我有一个手柄,我可以添加另一个角色࿰…...
1.编写 Prompt 的原则
一、环境配置 使用 OpenAI 的 ChatGPT API,需要有 API_KEY,并安装 OpenAI 库。安装命令:pip install openai 和 pip install zhipuai。配置方法:直接设置 openai.api_key 或通过环境变量设置。 二、两个基本原则 2.1 原则一&am…...
【JavaEE】网络(2)
一、网络编程套接字 1.1 基础概念 【网络编程】指网络上的主机,通过不同的进程,以编程的方式实现网络通信;当然,我们只要满足进程不同就行,所以即便是同一个主机,只要是不同进程,基于网络来传…...
SAS - Subtractive Port
在SAS(串行连接SCSI,Serial Attached SCSI)协议中,subtractive port 是一种特殊类型的端口,主要用于设备间的路由功能。它的作用是在路径选择过程中充当默认路径,以处理未明确指定路径的请求。以下是它的定…...
Unity3D项目为什么要使用FairyGUI
前言 Unity3D项目选择使用FairyGUI的原因是多方面的,主要涵盖性能优化、设计模式、编辑器支持、跨平台兼容性以及丰富的功能特性。以下是对这些方面的详细解析以及相关的代码实现。 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一…...
Pytest接口自动化测试框架Python自动化测试开发
一、引言 在软件开发过程中,接口测试是确保软件各个组件之间数据传输和功能交互正常工作的重要环节。通过接口测试,可以提高软件的整体质量和稳定性。Pytest是一个流行的Python自动化测试框架,提供了丰富的断言方法和灵活的测试组织结构&…...
MySQL追梦旅途之性能优化
1、索引优化 索引可以显著加速查询操作,但过多或不适当的索引也会带来负面影响(如增加写入开销)。因此,选择合适的索引至关重要。 创建索引: 为经常用于WHERE子句、JOIN条件和ORDER BY排序的列创建索引。 CREATE I…...
数字校园:信息时代的教育新形态
现如今,我们生活在一个信息爆炸的时代,每一天都有海量的信息产生。而在教育领域,也正在经历一场数字化的变革,这就是所谓的“数字校园”。数字校园可不是简单的把课本搬到电脑上那么简单,它其实是一个综合性的平台&…...
数字产业化和产业数字化到底是什么?
“数字产业化”和“产业数字化”在很多官方文件和领导人讲话中都是成对出现的,这两个术语看起来非常相似,但它们作为数字经济的两个重要组成部分,既有联系又有区别。 在谈数字产业化和产业数字化之前,我这里需要先给大家介绍一个概…...
每日十题八股-2024年12月14日
1.类加载器有哪些? 2.双亲委派模型的作用 3.讲一下类加载过程? 4.讲一下类的加载和双亲委派原则 5.什么是Java里的垃圾回收?如何触发垃圾回收? 6.判断垃圾的方法有哪些? 7.垃圾回收算法是什么,是为了解决了…...
大模型呼入机器人有哪些功能特点?(转)
大模型呼入机器人有哪些功能特点?(转) 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 大模型呼入机器人,作为现代通信技术与人工智能深度融合的产物,正逐渐成为企业提升服务…...
EasyExcel设置表头上面的那种大标题(前端传递来的大标题)
1、首先得先引用easyExcel的版本依赖,我那 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency> 2、然后得弄直接的实体类,&…...
[笔记] 编译LetMeowIn(C++汇编联编程序)过程
文章目录 前言过程下载源码vs2017 创建空项目 引入编译文件改项目依赖属性改汇编编译属性该项目还需注意编译运行 总结 前言 编译LetMeowin 项目发现是个混编项目,c调用汇编的程序,需要配置一下,特此记录一下 过程 下载源码 首先下载源码…...
(三)机器学习 - 标准差/方差
标准差 标准差是统计学中一个非常重要的概念,它用来衡量一组数据的离散程度,即数据点与平均值之间的偏离程度。标准差越大,表示数据点越分散;标准差越小,表示数据点越集中。 标准差的计算步骤如下: 计算数…...
笔记:在WPF中InvalidateMeasure,InvalidateArrange,InvalidateVisual,UpdateLayout主要功能
一、目的:简要介绍在WPF中InvalidateMeasure,InvalidateArrange,InvalidateVisual,UpdateLayout主要功能 在 WPF 中,InvalidateMeasure、InvalidateArrange、InvalidateVisual 和 UpdateLayout 是用于控制布局系统的四…...
[笔记]Qt下使用SendMessage、PostMessage和接收window消息
1.头文件和库引用 首先必须要包含windows.h这个头文件,如果使用一些扩展函数,还需要包含windowsx.h。网上说使用FindWindow要添加头文件winuser.h,不过应该windows.h是自动包含这个依赖的(我没有添加) #include <…...
使用echarts实现3d柱状图+折线图
以下代码有问题请直接问国内直连GPT/Claude HTML 需要注意threeDchart一定要设置宽度高度,不然图不显示,然后echarts版本不要太低,不然也不显示 <div id"threeDchart" class"threeDchart"></div>js set3DBarChart2(dat…...
【经验分享】容器云搭建的知识点
最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…...
JAVA |日常开发中Websocket详解
JAVA |日常开发中Websocket详解 前言一、Websocket 概述1.1 定义1.2 优势 二、Websocket 协议基础2.1 握手过程2.2 消息格式2.3 数据传输方式 三、Java 中使用 Websocket3.1 Java WebSocket API(JSR - 356)3.2 第三方库(如 Tyrus&…...
30.攻防世界unserialize3
进入场景 解读一下 这个类 xctf 中有一个公共属性 $flag ,其值为 111 ,并且定义了一个 __wakeup 魔术方法,当对象被反序列化时会自动调用该方法,该方法会输出 bad requests 并终止程序的执行。 ?code提示了参数 <?php clas…...
IS-IS协议
IS-IS协议介绍 IS-IS(Intermediate System to Intermediate System)协议是一种链路状态的内部网关协议(IGP),用于在同一个自治系统(Autonomous System, AS)内部的路由器之间交换路由信息。IS-I…...