Try   HackMD

利用Msys2 建立C語言開發平台

針對Windows系統開發C/C++編譯平台建立

比起 Linux 或是類Unix 系統Windows對於C語言支援缺乏單一最佳方案。目前來說,有以下四種方案:

  • Visual C++
  • Cygwin
  • WSL
  • MSYS2

編譯器差異

Viusal C++

Microsoft Visual C++
是微軟公司的C++ 開發工具,具有整合式開發環境,可提供編輯C語言,C++ 以及C++ /CLI等程式語言。VC++ 整合了便利的除錯工具,特別是整合了微軟Windows作業系統應用程式介面(Windows API)、三維動畫DirectX API,微軟.NET框架。目前最新的版本是Microsoft Visual C++ 2022

一般來說會建議直接使用 Visual Studio

Cygwin

Cygwin 是一套運行在 Windows 上的類 Unix 子系統,主要的用途是在 Windows 上使用類 Unix 系統的命令列環境、命令列工具、開發工具等。為了要讓 Cygwin 支援 POSIX,Cygwin 附帶了一隻額外的 DLL (動態連結函式庫)。故在 Cygwin 下編譯的程式皆會依賴該 DLL。Cygwin的主要應用是在Windows系統上提供類Unix的開發環境和工具,使用戶能夠在Windows平台上開發和運行類Unix的程式。它可以讓用戶在Windows上使用Unix/Linux下常見的命令列工具、開發工具和編譯器,如gcc、make、bash等,以及支援POSIX標準的函式庫。

與Visual C++相比,Cygwin有幾個主要的區別:

  1. 開發環境:Cygwin提供了一個完整的類Unix開發環境,包括了Unix/Linux下常見的命令列工具和開發工具,而Visual C++ 是微軟的整合開發環境(IDE),主要用於Windows平台的開發。
  2. 編譯器:Cygwin使用的是gcc編譯器,而Visual C++ 使用的是微軟的Visual C++ 編譯器(cl.exe)。
  3. 庫的依賴:Cygwin編譯的程式通常依賴於Cygwin的執行時庫(cygwin1.dll),而Visual C++ 編譯的程式通常依賴於Windows的執行時庫(如msvcrt.dll)。
  4. 支援的平台:Cygwin可以在Windows上模擬Unix/Linux環境,支援跨平台開發,而Visual C++主要用於Windows平台的開發。

綜上所述,Cygwin適用於希望在Windows平台上進行Unix/Linux風格開發的用戶,而Visual C++適用於專注於Windows平台開發的用戶。

WSL

Windows Subsystem for Linux (WSL) 是微軟為 Windows 10 和 Windows Server 2019 提供的功能,允許在 Windows 上運行本機 Linux 二進制應用程序。這為開發人員和系統管理員提供了在 Windows 操作系統上使用 Linux 工具和指令碼的能力,而無需使用虛擬機器或雙重開機。

WSL 提供了兩個主要的子系統版本:WSL 1 和 WSL 2。

  1. WSL 1:這個版本提供了一個 Linux 系統調用層,它在 Windows 上翻譯 Linux 系統調用到 Windows 系統調用,從而實現了 Linux 二進制文件的運行。然而,由於這種翻譯的性能限制,WSL 1 在文件系統性能和 Docker 支持方面可能存在一些限制。

  2. WSL 2:這個版本引入了虛擬化技術,將一個真正的 Linux 內核嵌入到 Windows 中,從而實現了更好的性能和完整的系統調用相容性。WSL 2 也支持與 Docker 完全兼容,並且在文件系統性能方面有顯著改進。

使用WSL,用戶可以在 Windows 中運行常見的 Linux 發行版,如 Ubuntu、Debian、Fedora 等,並且可以在這些發行版中安裝和運行 Linux 軟件包和工具,從而充分發揮了兩個操作系統的功能。這對於開發人員和系統管理員來說是一個強大的工具,因為它簡化了在混合環境中工作的流程,同時還提供了更好的性能和兼容性。

Msys2

MSYS2是一個在Windows平台上提供類Unix工具和環境的工具集合,旨在提供一個類似於Linux或Unix的開發環境,讓使用者能夠在Windows系統上進行開發工作。

MSYS2包含了一系列的工具和軟件,包括GNU工具和套件管理器。主要特點如下:

  1. 提供類Unix環境: MSYS2提供了一個類Unix的命令行環境,使用者可以在Windows系統上使用類Unix的命令行工具和指令碼語言,如bash、grep、awk等。

  2. 套件管理器: MSYS2具有自己的套件管理器,允許使用者方便地安裝、更新和管理各種軟件包。這包括了許多常見的開發工具、編譯器、庫和應用程序,如gcc、make、vim等。

  3. 整合開發環境: 使用者可以在MSYS2中進行軟件開發,包括C/C++、Python、Ruby等語言的開發。它提供了一個完整的開發環境,包括編輯器、調試器和版本控制系統等工具。

  4. 跨平台支援: MSYS2具有良好的跨平台支援,允許使用者在Windows、Linux和其他Unix-like系統上共享相同的開發環境和工具。

總的來說,MSYS2是一個強大的工具,為在Windows上進行開發工作的使用者提供了方便和彈性。它的類Unix環境和套件管理器使得在Windows系統上進行開發工作變得更加流暢和高效。

在本文內我們將介紹如何使用 Msys2 做為開發環境。

開發平台建立(Msys2)

  1. 新增Windows環境變數
    Image Not Showing Possible Reasons
    • The image was uploaded to a note which you don't have access to
    • The note which the image was originally uploaded to has been deleted
    Learn More →
  2. 下載Msys2.exe並安裝
    Image Not Showing Possible Reasons
    • The image was uploaded to a note which you don't have access to
    • The note which the image was originally uploaded to has been deleted
    Learn More →
  3. 使用Windows Termainal使用Mingw64
{ "commandline": "C:/msys64/msys2_shell.cmd -defterm -here -no-start -mingw64", "font": { "face": "MesloLGS NF", "size": 12.0 }, "guid": "{71160544-14d8-4194-af25-d05feeac7233}", "icon": "C:/msys64/mingw64.ico", "name": "Mingw64", "startingDirectory": "%USERPROFILE%" }

中文亂碼問題

家目錄下修改 bashrc新增下列指令

chcp.com 65001

使用ZSH

pacman -S zsh

新增 bashrc 使預設開啟ZSH

if [ -t 1 ]; then exec zsh fi

更換主題與套件

Oh-my-zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

p10k

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

語法高亮

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

自動補全

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

修改zshrc內容

ZSH_THEME="powerlevel10k/powerlevel10k"
plugins=(git zsh-syntax-highlighting zsh-autosuggestions)

大功告成

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

新增相關套件

GCC套件

pacman -Sy -y mingw-w64-x86_64-gcc
pacman -Sy -y --needed base-devel mingw-w64-x86_64-toolchain

修改環境變數

C:\msys64\mingw64\bin\

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

其他常用套件

pacman -S vim openssh git make 

更新Msys2

pacman -Suy 

Visual studio code 相關修改

settings.json

將MINGW64修改為Visual Studio Code 預設終端機

"terminal.integrated.defaultProfile.windows": "MINGW64", "terminal.integrated.profiles.windows": { "MINGW64": { "path": "C:\\msys64\\usr\\bin\\bash.exe", "label": "MSYS2", "args": [ "--login", "-i" ], "env": { "MSYSTEM": "MINGW64", "CHERE_INVOKING": "1", "MSYS2_PATH_TYPE": "inherit" } } }

如下,也一併確認是否成功將套件匯入。

image

修改SSH家目錄問題

修改
C:\msys64\etc\sshssh_config

將所有的 ~ 修改為家目錄位置,如:\c\Users\YOU

如下:

IdentityFile ~/.ssh/id_rsa IdentityFile ~/.ssh/id_dsa IdentityFile ~/.ssh/id_ecdsa IdentityFile ~/.ssh/id_ed25519 . . . UserKnownHostsFile /c/Users/Defu/.ssh/known_hosts.d/%k

改為

IdentityFile /c/Users/YOU/.ssh/id_rsa IdentityFile /c/Users/YOU/.ssh/id_dsa IdentityFile /c/Users/YOU/.ssh/id_ecdsa IdentityFile /c/Users/YOU/.ssh/id_ed25519 . . . UserKnownHostsFile /c/Users/YOU/.ssh/known_hosts

至此,可以在Windows上使用大部分Linux相關環境與編輯能功能了

image