目录

  • 一、MSYS2是什么
    • 1.1 核心架构与组件​​
      • 1.1.1 背景介绍
        • 1.1.1.1 Cygwin
        • 1.1.1.2 MinGW和Mingw-w64
        • 1.1.1.3MSYS和MSYS2
      • 1.1.2 技术基础​​
      • 1.1.3 多环境支持​​
    • 1.2 核心功能​​
      • 1.2.1 类Unix开发环境​​
      • 1.2.2 开发工具链​​
      • 1.2.3 软件仓库与包管理​​
  • 二、安装和配置
    • 2.1 配置环境
      • 2.1.1 UCRT64
      • 2.1.2 MINGW64
  • 三、MSYS2的功能
    • 3.1 模拟Unix
    • 3.2 文件系统
  • 四、配置CMake开发环境
    • 4.1.下载安装CMake
    • 4.2.配置环境变量
    • 4.3.配置vscode
    • 4.4.构建CMake项目
    • 4.5.结果展示
    • 4.6调试

一、MSYS2是什么

MSYS2(Minimal SYStem 2)是一个专为Windows系统设计的​​轻量级类Unix开发环境​​,集成了软件包管理、编译工具链和命令行工具,旨在解决Windows平台开发中的跨平台兼容性问题。其核心目标是为开发者提供在Windows上高效运行Linux/Unix工具和编译原生Windows程序的能力。

1.1 核心架构与组件​​

1.1.1 背景介绍

1.1.1.1 Cygwin

Cygwin是运行于Windows平台的POSIX"子系统"”,提供了类Unix环境的工具和开发库,Cygwin将Unix程序编译为Windows本地代码,然后在Windows上运行。它提供了最完整的Linux/Unix环境,但相对于MSYS2和MinGW-w64,Cygwin的性能较差

1.1.1.2 MinGW和Mingw-w64

MinGW 的全称是:Minimalist GNU on Windows,它实际上是将Linux下的编译器 GCC 移植到了 Windows,并且包含了 win32 API,因此可以将源代码编译为可在 Windows 中运行的可执行程序。它还可以使用一些 Windows 不具备的,Linux平台下的开发工具。
MinGW项目目前已经接近停止,且只能编译生成32位可执行程序。2007年为了支持64位应用程序开发和新的WindowsAPI,从MinGW分叉而出。MinGW-w64 支持编译 64位和 32位 可执行程序。

1.1.1.3MSYS和MSYS2

MSYS,全称Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等,可以看作是Cygwir的迷你版。
由于MSYS 常年不更新,于是 Alex 等人 在 Cygwin的基础上创建了MSYS2.MSYS2 包含了一些工具和库,提供易于使用的环境,用于构建、安装和运行本机 Windows 软件
它由一个名为 minty的命令行终端、bash、qit 和 subversion 等版本控制系统,tar和 awk 等工具,甚至 autotools 等构建系统组成,所有这些都基于 Cvgwin 的修改版本,尽管其中一些核心部件基于 Cygwin,但 MSYS2 的重点是为本地 Windows 软件提供构建环境,并且将使用 Cygwin 的部件保持在最低限度。MSYS2为 GCC、Mingw-w64、CPython、CMake、Meson、OpenSSL、FFmpeg、RustRuby 等提供最新的本机构件支持。
MSYS2安装包中包含了Mingw-w64。

1.1.2 技术基础​​

  • ​​Cygwin兼容层​​:提供部分POSIX兼容性,支持Unix程序在Windows运行。
  • ​​MinGW-w64工具链​​:支持生成原生Windows程序(32/64位),无需依赖Cygwin库。
  • ​​Pacman包管理器​​:移植自Arch Linux,支持软件安装、依赖解析及滚动更新(如 pacman -Syu更新系统)。

1.1.3 多环境支持​​

MSYS2提供了五种不同的终端环境

  • MSYS2提供独立终端环境,适应不同开发需求:
  • ​​MSYS​​:POSIX兼容环境,适合移植Unix工具。
  • MINGW64/MINGW32​​:编译原生64位/32位Windows程序。
  • UCRT64​​(推荐):基于Windows 10/11通用C运行时库(UCRT),兼容性更佳。
  • CLANG64/CLANG32​​:使用Clang编译器,支持现代C++标准
    在这里插入图片描述

1.2 核心功能​​

1.2.1 类Unix开发环境​​

  • 提供Bash Shell及常用工具(grep、sed、make、Git),支持脚本编写与文件管理。
  • 支持中文路径输入,集成POSIX兼容库。

1.2.2 开发工具链​​

  • 预装GCC、Clang、GDB、CMake等工具,支持C/C++项目编译、调试与构建。
  • 可通过Pacman快速安装工具链(如 pacman -S mingw-w64-ucrt-x86_64-toolchain)。

1.2.3 软件仓库与包管理​​

  • 提供数千预编译包(如Python、OpenCV、Qt),覆盖开发全场景。
  • 自动处理依赖冲突,支持镜像源配置加速下载(如国内清华源)

二、安装和配置

直接找到官网下载安装即可

2.1 配置环境

里面一共具有多个环境,每一个里面都支持下载安装gcc工具。

2.1.1 UCRT64

为了方便我直接使用的是UCRT64,它和MinGW64差不多,但是在windows下支持的更好。参考链接
在这里插入图片描述

  • 点击图中的UCRT64,将会打开一个终端
  • 输入指令,配置该环境中的工具链
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
  • 右击我的电脑,选择高级设置,在管理员环境变量中设置相应的环境变量D:\msys64\ucrt64\bin。如果不好用了重新配置环境变量MINGW即可。
  • 此时在cmd中查看gcc和g++的路径,会发现它就指向环境变量这个位置。

到目前为止,其实就已经配置好了编译器,只需要再安装一个编辑器,比如vscode就可以执行C/C++程序了。

2.1.2 MINGW64

如果要用MINGW64,参考链接

  • 搜索工具包gcc和gdb
pacman -Ss gcc
pacman -Ss gdb

在这里插入图片描述
可以看到会出现多个包,我们需要的是图中的绿色的。gdb也是一样的。
如果找不到的话,就pacman指令更新一下就好

  • 安装工具包
pacman -S mingw-w64-x86_64-gcc
pacman -S mingw-w64-x86_64-gdb

这样就安装上了gcc和gdb。

三、MSYS2的功能

这个部分介绍MSYS2作为类Unix系统的功能,如果是要配置CMake并调试C/C++的话,直接跳转到第四部分即可。

3.1 模拟Unix

任意打开一个终端,它是这样的
在这里插入图片描述
其中用户名后面的紫色文字指定了系统的运行环境,这里是MSYS,如果想用别的可以切换成别的。在这里面我们可以执行unix中的命令,包括bash等。但是它本质上仍然不是linux系统。

3.2 文件系统

在这里插入图片描述
这个是MSYS2的安装文件夹,可以看到里面也具有usr、dev、etc等文件夹,就很象是linux操作系统。所以我就试着在MSYS终端和MINGW终端的~路径下用mkdir分别创建了文件夹new和nnew,它居然在home里的用户的文件夹中出现了,这表明在这样的系统里面模拟运行linux程序是很可能的(虽然不如wsl好用)。未来未必没有在嵌入式中交叉编译的可能性。
在这里插入图片描述

四、配置CMake开发环境

4.1.下载安装CMake

到CMake官网下载安装版或者绿色版都可以,进行安装。我下载的是安装版,安装到了D:\Program Files目录下。

4.2.配置环境变量

  • 右键我的计算机,找到“高级系统设置”
  • 配置环境变量,直接配置系统变量即可,这样所有用户都可以使用
  • 确认CMake安装路径下的bin文件,bin文件中放的是可执行程序CMake.exe
  • 具体配置如下图,添加路径D:\Program Files\CMake\bin
    在这里插入图片描述
    其实bin里面还包含了GUI等可执行文件

4.3.配置vscode

  • 安装三个插件
    在这里插入图片描述

4.4.构建CMake项目

  • 打开工作区,创建文件夹,里面包含源文件、头文件等
  • 工作区根目录创建文件CMakeLists.txt,这个是CMake构建文件。
  • 创建之后选择编译器,上文我安装的MSYS2里面含有gcc编译器,刚好选择这个就好
    在这里插入图片描述
  • 如果要更换编译器
    在这里插入图片描述

4.5.结果展示

  • 文件结构
    在这里插入图片描述
  • hello.h内容
#ifndef __HELLO_H__
#define __HELLO_H__#include <iostream>class hello
{
private:/* data */
public:hello(/* args */);~hello();void print();
};hello::hello(/* args */)
{
}hello::~hello()
{    
}#endif
  • hello.cpp内容
#include "hello.h"void hello::print()
{std::cout << "hello world" << std::endl;
}int main()
{hello h;h.print();return 0;
}
  • CMakeList.txt
cmake_minimum_required(VERSION 3.10) # 最低cmake版本
project(hello) # 项目名称
set(CMAKE_CXX_STANDARD 11) # 设置c++标准
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror") # 设置编译选项include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc) # 包含头文件目录,${CMAKE_CURRENT_SOURCE_DIR}是当前cmake文件所在目录set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin) # 设置可执行文件输出目录aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST) # 查找src目录下所有源文件,并将结果赋值给SRC_LIST变量add_executable(hello ${SRC_LIST}) # 生成可执行文件
  • 生成目标
    在这里插入图片描述
  • 结果
    文件夹结构变为
├─.vscode
├─bin
├─build
│  ├─.cmake
│  │  └─api
│  │      └─v1
│  │          ├─query
│  │          │  └─client-vscode
│  │          └─reply
│  └─CMakeFiles
│      ├─4.0.0-rc3
│      │  ├─CompilerIdC
│      │  │  └─tmp
│      │  └─CompilerIdCXX
│      │      └─tmp
│      ├─CMakeScratch
│      ├─hello.dir
│      │  └─src
│      └─pkgRedirects
├─inc
└─src

bin里面生成了可执行程序hello.exe

4.6调试

点击生成右面的小虫子即可调试
在这里插入图片描述

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

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

相关文章

Vue 3 + TypeScript:package.json 示例 / 详细注释说明

一、示例 / 详细注释说明 {// 项目基础信息"name": "vite-project", // 项目名称&#xff08;建议使用 kebab-case 格式&#xff09;"private": true, // 标记为私有项目&#xff0c;避免意外发布到 npm"version": "1.0.…

SpatialVLM和SpatialRGPT论文解读

目录 一、SpatialVLM 1、概述 2、方法 3、实验 二、SpatialRGPT 1、概述 2、方法 3、训练方法 4、实验 一、SpatialVLM 1、概述 SpatialVLM是最早的依赖传统VLMs实现3D空间推理能力的论文&#xff0c;在24年1月由DeepMind团队提出&#xff0c;当时对比的还是GPT4v&am…

理解GPU架构:基础与关键概念

GPU 基础概述&#xff1a;从图形渲染到 AI 与高性能计算的核心 Graphics Processing Units&#xff08;GPU&#xff09;已从专用的图形渲染硬件演进为 AI、科学计算与高性能任务的中坚力量。本文将介绍 GPU 架构的基础知识&#xff0c;包括其组成部分、内存层次结构&#xff0c…

订单状态定时处理(Spring Task 定时任务)

订单状态定时处理 如果最后一秒刚好支付了咋办?如何补偿? 需要将支付状态和订单状态一起考虑,或者直接使用状态机 Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 **定位:**定时任务框架 **作用:**定时自动执行某段Java代码 …

职得AI简历-免费AI简历生成工具

本文转载自&#xff1a;职得AI简历-免费AI简历生成工具 - Hello123工具导航 ** 一、核心功能解析 职得 AI 简历是 AI 驱动的智能求职平台&#xff0c;通过深度学习算法分析百万优质简历数据&#xff0c;提供从简历生成到面试准备的全流程服务&#xff0c;显著提升求职竞争力。…

8.14 机器学习(1)

机器学习基础一、什么是机器学习定义&#xff1a;让计算机利用大量数据在特定任务上持续改进性能的过程&#xff0c;可以让任务完成的更好。机器学习的领域很多。二、机器学习基本术语数据集、样本、特征&#xff08;属性&#xff09;、属性空间、向量表示、训练集&#xff08;…

给电脑升级内存,自检太慢,以为出错

公司电脑是16G内存&#xff0c;用虚拟机时非常吃力。于是跟领导说&#xff0c;买了32G内存和1T SSD。电脑有两个SATA数据线&#xff0c;SATA电源头只有一个。于是买了几个1转2&#xff0c;顺利接上。把原来的16G拔下&#xff0c;换上32G内存。结果开机没反应。心里就有点嘀咕&a…

Effective C++ 条款43:学习处理模板化基类内的名称

Effective C 条款43&#xff1a;学习处理模板化基类内的名称核心思想&#xff1a;模板化基类&#xff08;templatized base classes&#xff09;中的名称在派生类模板中默认不可见&#xff0c;需要通过this->前缀、using声明或显式基类限定来引入。这是因为编译器在解析模板…

Mybatis简单练习注解sql和配置文件sql+注解形式加载+配置文件加载

项目结构 d:\test\runjar\data\static\data\mybatis_helloworld\Mybatis\ ├── lib\ │ ├── asm-3.3.1.jar │ ├── c3p0-0.9.1.2.jar │ ├── cglib-2.2.2.jar │ ├── commons-logging-1.1.1.jar │ ├── ehcache-core-2.6.8.jar │ ├── javassi…

抗日胜利80周年 | HTML页面

飞翔的和平鸽&#xff1b;屹立的人民英雄纪念碑&#xff1b;倒下的日本国旗&#xff1b;旋转的金色勋章无不代表着我们胜利了&#xff01;&#xff01;&#xff01;HTML源代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta cha…

web仿写网站

一、完成自己学习的官网&#xff0c;至少三个不同的页面。1、界面1&#xff08;1&#xff09;代码<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

基于element-plus和IndexedDB数据库的基础表单

本文介绍了基于Vue 3和Element Plus的表单项目配置页面实现。页面包含搜索栏、操作按钮、数据表格和分页组件&#xff0c;使用IndexedDB进行本地数据存储。主要功能包括&#xff1a;1) 通过模糊查询搜索项目&#xff1b;2) 分页显示项目数据&#xff1b;3) 添加/编辑/删除项目操…

paimon实时数据湖教程-主键表更新机制

在上一章&#xff0c;我们学习了 Paimon 如何保证每一次写入的原子性和一致性。但数据仓库的核心需求不仅是写入&#xff0c;更重要的是更新。想象一个场景&#xff1a;我们需要实时更新用户的最新信息&#xff0c;或者实时累加计算用户的消费总额。传统的 Hive 数据湖对此无能…

第十六届蓝桥杯青少组C++省赛[2025.8.9]第二部分编程题(4、矩阵圈层交错旋转)

参考程序&#xff1a;#include <bits/stdc.h> using namespace std;const int MAXN 105; int a[MAXN][MAXN];int main() {int n;if (!(cin >> n)) return 0;for (int i 0; i < n; i)for (int j 0; j < n; j)cin >> a[i][j];int layers n / 2; // 每…

【FastGTP✨】[01] 使用 FastGPT 搭建简易 AI 应用

简易应用&#xff1a;英语单词解释 例句 1. 前言 FastGPT 是一个低代码 AI 应用构建平台&#xff0c;可以通过简单配置快速创建自己的 AI 应用。 本文将带你用 FastGPT 搭建一个 英语单词解释 例句 的 AI 工具&#xff0c;输入英文单词后&#xff0c;输出&#xff1a; 单词…

【Mysql语句练习】

MysqlMysql语句练习一、建库建表二、插入数据三、查询Mysql语句练习 一、建库建表 1、创建数据库mydb11_stu&#xff0c;并使用数据库 # 创建数据库mydb11_stu mysql> create database mydb11_stu; Query OK, 1 row affected (0.00 sec) # 使用数据库 mysql> use mydb1…

用Python Scrapy征服网络爬虫(反爬技术深入剖析)

目录 第1章:Scrapy是个啥?为什么它是你爬虫路上的最佳拍档? 1.1 Scrapy的核心亮点 1.2 啥时候用Scrapy? 1.3 安装Scrapy 第2章:动手写你的第一个Scrapy爬虫 2.1 创建Scrapy项目 2.2 定义数据结构(Items) 2.3 编写爬虫逻辑 2.4 运行爬虫 2.5 小技巧:调试爬虫 …

解决Electron透明窗口点击不影响其他应用

遇到的问题&#xff1a;在electron透明窗口点击&#xff0c;影响窗口下的应用接受不到点击事件解决方案&#xff1a;CSSIgnoreMouseEvents实现原理&#xff1a;主进程默认设置禁用目标窗口鼠标事件&#xff08;禁用之后能检测到mousemove&#xff09;&#xff0c;UI进程检测页面…

C# 泛型(Generics)详解

泛型是 C# 2.0 引入的核心特性&#xff0c;它允许在定义类、接口、方法、委托等时使用未指定的类型参数&#xff0c;在使用时再指定具体类型。这种机制可以显著提高代码的复用性、类型安全性和性能。一、泛型的核心概念类型参数化泛型允许将类型作为 "参数" 传递给类…

Spring中存在两个相同的Bean是否会报错?

第一种情况&#xff1a;使用XML的方式设置Bean&#xff0c;这种情况在Spring启动时就会报错&#xff0c;因为ID在Spring中是Bean的唯一标识&#xff0c;Spring容器在启动时会校验唯一性&#xff0c;一旦发现重复就会报错。但是如果是在两个不同的XML文件中定义两个相同的Bean&a…