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

MSYS2+CMake配置C/C++开发环境

目录

  • 一、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.lryc.cn/news/622500.html

相关文章:

  • OpenSCA开源社区每日安全漏洞及投毒情报资讯|14th Aug. , 2025
  • plantsimulation中存储(store)、缓冲区(buffer)、放置缓冲区(PlaceBuffer)的区别,分别应用于那种情况
  • OpenCompass傻瓜式入门教程
  • linux-数据链路层
  • 博弈论06——PPAD复杂度问题
  • JAVA-DAY7-面向对象进阶
  • 从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.15
  • Java研学-SpringCloud(三)
  • Erlang notes[2]
  • Shortest Routes II(Floyd最短路)
  • 数据结构:二叉树的表示方式(Representation of Binary Trees)
  • 【100页PPT】数字化转型集团信息化总体解决方案(附下载方式)
  • UI-TARS-Desktop 产品发展史:从实验室原型到企业级解决方案
  • gulimall项目笔记:P54三级分类拖拽功能实现
  • 深入理解C++正则表达式:从基础到实践
  • ramdisk内存虚拟盘(一)——前世今生
  • Python爬取推特(X)的各种数据
  • 功能组和功能组状态的概念关系和区别
  • 【揭秘红黑树:高效数据结构解析】
  • 谈谈《More Effective C++》的条款30:代理类
  • JavaScript 防抖(Debounce)与节流(Throttle)
  • Python入门第2课:变量、数据类型与输入输出
  • MySQL(多表查询练习)
  • C#控制台输入(Read()、ReadKey()和ReadLine())
  • 【大模型微调系列-01】 入门与环境准备
  • Linux信号保存
  • PowerShell 格式化系统完全掌握(上):工作原理、默认规则与三大格式化命令
  • 【数据分享】上市公司创新韧性数据(2007-2023)
  • 数据处理分析环境搭建+Numpy使用教程
  • MySQL、PolarDB、PolarDB-X、TableStore、MongoDB、TiDB、ClickHouse选型