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.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…