vscode+msys2+clang+xmake c++开发环境搭建

转载请标明出处:小帆的帆的专栏

安装msys2

  1. 下载msys2安装包:清华源下载地址
  2. 安装msys2:安装目录,C:\Softwares\msys64

安装cling工具链,xmake

!!!在开始菜单中启动MSYS2 CLANG64, 而不是UCRT(安装后默认启动的是UCRT)

在这里插入图片描述

确保下图红圈中是CLANG64

在这里插入图片描述
下面的命令都在msys clang命令终端中完成,依次是配置清华源安装clang工具链安装xmake

配置清华源

  1. 修改源
sed -i "s#https\?://mirror.msys2.org/#https://mirrors.tuna.tsinghua.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*
  1. 同步包数据库
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

  1. 安装vscode
  2. 安装git,xmake下载包时会用到
  3. 安装vscode插件xmake
  4. 安装vscode插件CodeLLDB,安装过程中遇到网络问题参考此文手动安装
  5. 安装vscode插件clangd
  • 注意:不要安装vscode C++ 插件,会有冲突,项目构建、运行和调试可以在vscode的xmake工具栏中点击,而不是vscode右上角的运行调试按钮。

运行并调试HelloWorld项目

创建HelloWorld项目

现在我们有一个全局的xmake命令,和vscode-xmake插件,就可以在vscode中创建项目了。

  1. 创建一个项目文件夹
  2. 用vscode打开
  3. 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模式

这里要说明两个名词:

  1. 平台:windows,linux,mingw,msys等是平台。
  2. 工具链:clang,gcc,msvc等是工具链。

例如:在windows上同时装clang和gcc,然后又在msys上装了clang,所以当指定工具链就要说是哪个平台的哪个工具链。

平台和工具链可以在vscode下方的xmake工具栏中查看和修改。
在这里插入图片描述

在xmake工具栏中修改平台为msys,架构为x86_64,模式为debug,然后再运行XMake: Configure错误还在。

在这里插入图片描述

原因是系统中还没有指定clang工具链的路径,平台指定了msys,但是xmake还是不知道clang工具链在哪。可以通过配置环境变量解决。

配置环境变量有两个选择,推荐使用方法1

  1. 方法1:添加系统环境变量,然后关闭所有vscode窗口,重启。
# 添加此环境变量到用户或系统均可
C:\Softwares\msys64\clang64\bin
  1. 方法2:设置vscode环境变量,具体参考vscode不同的项目使用不同的环境变量或编译环境。

配置完成后再运行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的方法实现:

  1. 鼠标点击xmake.lua文件中任意位置,无需修改
  2. 直接Ctrl + S保存文件
  3. compile_commands.json就会生成
  • 生成compile_commands.json内容的前提是,build成功,helloworld.exe存在。

在这里插入图片描述

生成完成后,重启vscode或者命令面板中运行clangd: Restart language server,再看clangd的日志就成功加载编译数据库了。

在这里插入图片描述

配置成功后,鼠标放在代码上就会有弹出信息。

在这里插入图片描述

xmake包管理

通过xmake添加三方库,这里以fmt为例。

  1. 修改helloworld.app
#include <fmt/format.h>int main(int argc, char** argv)
{fmt::print("hello world!\n");return 0;
}

修改完成后fmt报红

  1. 添加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()
  1. 在命令面板中运行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"},
}
  1. 解决cmake错误

成功下载包后在安装时会包CMAKE_MAKE_PROGRAM is not set

在这里插入图片描述
虽然安装fmt时xmake有安装cmake,但还是报错了。

解决办法有两步:

  1. msys clang64环境中安装cmake
pacman -S mingw-w64-clang-x86_64-cmake
  1. 在环境变量中添加CMAKE_GENERATOR=Ninja

再运行XMake: Configure就配置成功了。

在这里插入图片描述

  1. 构建运行

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?

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

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

相关文章

VMware ubuntu16.04怎么设置静态IP联网

1.将VMware桥接到当前电脑使用的网络上面&#xff1b; 2.点击网络符号&#xff0c;编辑连接&#xff1b; 3.双击有线连接1&#xff1b; 4.选择IPv4设置&#xff0c;将地址&#xff0c;子网掩码&#xff0c;网关&#xff0c;DNS服务器设置好&#xff0c;保存&#xff1b; 5.在终…

金蝶云苍穹踩过的坑(慢慢更新)

IDEA不能用最新版&#xff0c;不然搜不到金蝶的插件。 我用的是2024.1.7/2023.1.7 IDEA里增加金蝶插件库的地址也变了&#xff0c;现在是 https://tool.kingdee.com/kddt/idea-updatePlugins.xml 金蝶云苍穹部署在服务器 MAC本地IDEA调试的时候&#xff0c;登录N次能成功一次…

【人工智能学习之HDGCN训练自己的数据集】

【人工智能学习之HDGCN训练自己的数据集】 HD-GCN准备事项项目代码开源数据集第一行&#xff1a;帧数第二行&#xff1a;body数第三行&#xff1a;关节附加信息第四行&#xff1a;关节数5-29行&#xff1a;每个关节的数据之后的帧总结&#xff1a; 自定义2D数据集模型移植与修改…

Trimble天宝三维激光扫描仪在建筑工程竣工测量中的应用【沪敖3D】

竣工测量是建筑项目竣工阶段的一个至关重要的环节&#xff0c;它为建筑工程的质量验收和成果核查提供了核心的参考依据。传统的竣工测量方法&#xff0c;如全站仪测量&#xff0c;主要依赖于现场人工操作&#xff0c;存在一些明显的局限性&#xff0c;例如作业时间长、工作量大…

Unity A*算法实现+演示

注意&#xff1a; 本文是对基于下方文章链接的理论&#xff0c;并最终代码实现&#xff0c;感谢作者大大的描述&#xff0c;非常详细&#xff0c;流程稍微做了些改动&#xff0c;文末有工程网盘链接&#xff0c;感兴趣的可以下载。 A*算法详解(个人认为最详细,最通俗易懂的一…

MoonBit 核心编译器正式开源!

由 IDEA研究院基础软件中心打造的 MoonBit &#xff08;月兔&#xff09;AI 原生开发平台&#xff0c;今日宣布正式开源其核心的编译器 WebAssembly&#xff08;简称“Wasm”&#xff09; 后端。开发者现在可以利用 MoonBit 的能力做性能优化&#xff0c;且直接参与 MoonBit 的…

JS使用random随机数实现简单的四则算数验证

1.效果图 2.代码实现 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</ti…

linux0.11源码分析第一弹——bootset.s内容

&#x1f680;前言 本系列主要参考的《linux源码趣读》&#xff0c;也结合之前《一个64位操作系统的设计与实现》的内容结合起来进行整理成本系列博客。在这一篇博客对应的是《linux源码趣读》第一~四回 目录 &#x1f680;前言&#x1f3c6;启动后的第一步&#x1f4c3;启动区…

OpenIPC开源FPV之Adaptive-Link天空端代码解析

OpenIPC开源FPV之Adaptive-Link天空端代码解析 1. 源由2. 框架代码2.1 消息机制2.2 超时机制 3. 报文处理3.1 special报文3.2 普通报文 4. 工作流程4.1 Profile 竞选4.2 Profile 研判4.2.1 回退策略4.2.2 保持策略 4.3 Profile 应用 5. 总结6. 参考资料7. 补充资料7.1 RSSI 和 …

【译】仅有 Text2SQL 是不够的: 用 TAG 统一人工智能和数据库

原文地址&#xff1a;Text2SQL is Not Enough: Unifying AI and Databases with TAG 摘要 通过数据库为自然语言问题提供服务的人工智能系统有望释放出巨大的价值。此类系统可让用户利用语言模型&#xff08;LM&#xff09;的强大推理和知识能力&#xff0c;以及数据管理系统…

【自动驾驶】单目摄像头实现自动驾驶3D目标检测

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;传知代码 欢迎大家点赞收藏评论&#x1f60a; 目录 概述算法介绍演示效果图像推理视频推理 核心代码算法处理过程使用方式环境搭建下载权重文件pytorch 推理&#xff08;自动选择CPU或GPU&#x…

什么是Modbus协议网关?

在工业自动化领域&#xff0c;设备间的通信与数据交换是实现高效、智能控制的关键。Modbus协议作为一种广泛应用的通信协议&#xff0c;自1971年由Modicon公司首次推出以来&#xff0c;便以其标准、开放、支持多种电气接口等特点&#xff0c;在工业控制系统中占据了重要地位。然…

《云原生安全攻防》-- K8s安全框架:认证、鉴权与准入控制

从本节课程开始&#xff0c;我们将来介绍K8s安全框架&#xff0c;这是保障K8s集群安全比较关键的安全机制。接下来&#xff0c;让我们一起来探索K8s安全框架的运行机制。 在这个课程中&#xff0c;我们将学习以下内容&#xff1a; K8s安全框架&#xff1a;由认证、鉴权和准入控…

如何利用Python爬虫获得1688商品详情

在这个信息爆炸的时代&#xff0c;数据就像是一块块美味的奶酪&#xff0c;而爬虫就是我们手中的瑞士军刀。今天&#xff0c;我要带你一起潜入1688这个巨大的奶酪洞穴&#xff0c;用Python爬虫捞起那些香气四溢的商品详情。别担心&#xff0c;我们的工具箱里有各种各样的工具&a…

CAN配置---波特率中断引脚等---autochips-AC7811-ARM-M3内核

1、配置工具 虽然不怎么好用&#xff0c;但比没有强多了。具体看图&#xff1a; 时钟选着 NVIC配置 GPIO配置 2、生成的具体配置信息 NXP的配置工具里面&#xff0c;具体的波特率可以直接显示&#xff0c;这个工具没有&#xff0c;怎么办&#xff1f; 它放到了生成的代码里面…

MySQL的并发控制与MVCC机制深度解析

目录 1. MySQL中的并发问题2. 数据库的隔离级别3. MVCC&#xff08;多版本并发控制&#xff09;机制3.1 MVCC的实现原理3.2 Read View详解3.3 当前读与快照读 4. MVCC在不同隔离级别下的工作方式5. MVCC解决幻读问题6. MVCC的优缺点优点&#xff1a;缺点&#xff1a; 7. MVCC在…

网络编程 02:IP 地址,IP 地址的作用、分类,通过 Java 实现 IP 地址的信息获取

一、概述 记录时间 [2024-12-18] 前置文章&#xff1a;网络编程 01&#xff1a;计算机网络概述&#xff0c;网络的作用&#xff0c;网络通信的要素&#xff0c;以及网络通信协议与分层模型 本文讲述网络编程相关知识——IP 地址&#xff0c;包括 IP 地址的作用、分类&#xff…

游戏AI实现-寻路算法(Dijkstra)

戴克斯特拉算法&#xff08;英语&#xff1a;Dijkstras algorithm&#xff09;&#xff0c;又称迪杰斯特拉算法、Dijkstra算法&#xff0c;是由荷兰计算机科学家艾兹赫尔戴克斯特拉在1956年发现的算法。 算法过程&#xff1a; 1.首先设置开始节点的成本值为0&#xff0c;并将…

【第二节】Git 工作流程、概念及仓库创建

目录 一、Git 工作流程 二、Git 基本概念 2.1 工作区 2.2 暂存区 2.3 版本库 2.4 操作流程 三、Git 仓库创建 3.1 初始化仓库 3.2 克隆仓库 一、Git 工作流程 Git 的工作流程通常包括以下几个步骤&#xff1a; 1. **克隆 Git 资源**&#xff1a;将远程 Git 仓库克隆到…

概率论得学习和整理30: 用EXCEL 描述泊松分布 poisson distribution

目录 1 泊松分布的基本内容 1.1 泊松分布的关键点 1.1.1 属于离散分布 1.1.2 泊松分布的特点&#xff1a;每个子区间内概率相等 &#xff0c; λ就是平均概率 1.2 核心参数 1.3 pmf公式 1.4 期望和方差 2 例1&#xff1a;用EXCEL计算泊松分布的概率 3 比较λ不同值时…