目錄
- 一、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調試
點擊生成右面的小蟲子即可調試