基于MSYS2的MINGW64 GCC和CMake在Win下VSCode里搭建SDL2開發(fā)環(huán)境

參考文章:?https://my.oschina.net/u/5732601/blog/5516455
大體上參考了此文章, 但其原文的中有幾處bug或說明不到的地方, 我在后文中會指出。
0. 序言
為何會有此文?
最近一段在開發(fā)一個基于LVGL GUI的小設備, 開發(fā)過程中就覺得, 每次圖形界面有些稍稍的改動, 都必須把程序燒到設備中才能看到效果, 實在是麻煩. 就想著還是必要在PC上搭建一個LVGL的模擬器.
LVGL的官網(wǎng)里列出了以下幾種搭建模擬器的方案:

CodeBlocks沒用過不想再去安裝個新軟件, VisualStudio也是要新裝而且太笨重, FastModel不知道是什么?
VSCode已經(jīng)是我目前的主力編輯器, 所以就選了VSCode with SDL driver的方案, 雖然官網(wǎng)推薦其用在Linux or Mac環(huán)境下,
但我已搜索就找到參考文章, 覺得應該也能在Win下搞定.
這個本質(zhì)上的工作就是在Win下的VSCode里搭建SDL的開發(fā)環(huán)境, 好的接下來開始.
1. 安裝MSYS2
先下載MSYS2, 到其官網(wǎng)下載即可, 不過它的下載鏈接是github的, 眾所周知的原因, 下載會比較慢, 最新的安裝程序83.5MB, 直接下載基本不可行. 我是到清華大學的鏡像站下載的, 下載鏈接:?https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/x86_64/msys2-x86_64-20230318.exe
安裝MSYS2還是比較簡單, 根據(jù)其官網(wǎng)的說明, 一步步默認安裝即可.
關于其安裝目錄, 官網(wǎng)有如下提醒:
short ASCII-only path on a NTFS volume, no accents, no spaces, no symlinks, no subst or network drives, no FAT
所以就不要使用中文路徑了.
而且最好把安裝路徑改到非系統(tǒng)盤比如D盤, 因為隨著在MSYS2內(nèi)不斷安裝各種軟件, 其占用空間會越來越大.
2. 在MSYS2中安裝GCC和CMake
2.1 修改鏡像源
pacman是MSYS2的軟件包管理工具, 還是因為眾所周知的原因, 直接使用官方默認的軟件包安裝源的話, 安裝速度會讓你感動. 所以我們需要 和在Linux發(fā)行版中所作的一樣,?裝軟件之前先改成國內(nèi)的鏡像源.
不過這個修改安裝源要稍稍方便一點, 因為MSYS2的默認安裝里的 源配置文件 中已經(jīng)列出來了 國內(nèi)?清華tsinghua?和?中科大ustc?的鏡像源地址, 我們所做的不過是把這2個源給剪切到最前面?即可.
共有7個源配置文件, 位于類似D:\msys64\etc\pacman.d\
目錄下, 視你的MSYS2安裝目錄而定.
如果你只用mingw64工具鏈, 可以只修改mirrorlist.mingw64這一個配置文件; 也可以7個全修改.
我修改了?mirrorlist.mingw32,?mirrorlist.mingw64,?mirrorlist.msys,?mirrorlist.ucrt64?這4個配置文件.


BTW: 在參考文章并沒有提到 這一步, 這算是它的一個小坑吧或者不完善之處.
2.2 更新panman基本軟件倉庫
還是和通常Linux發(fā)行版下所做的一樣, 修改完鏡像源, 應更新一下軟件倉庫, 使用如下命令:
pacman -Syu
檢查更新過程中,MSYS2可能會因為安裝更新而自動關閉,可再次在開始菜單中打開MSYS2,然后再次執(zhí)行pacman -Syu
命令即可.
確定更新完畢, 還可用pacman -Su
命令確認一下, 如下圖:

2.3 安裝GCC和CMake
因為我們要用MINGW64工具鏈, 所以從開始菜單打開MSYS2 MINGW64命令行, 輸入下面命令:
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
安裝C/C++編譯工具鏈.
安裝過程中, 可如下圖選擇:

安裝完后, 可用gcc --version
命令試一下.
GCC好了后, 再來安裝CMake, 命令如下:
pacman -S --needed base-devel mingw-w64-x86_64-cmake
都安裝好后, 將類似D:\msys64\mingw64\bin
路徑(視MSYS2安裝目錄而定), 添加到系統(tǒng)環(huán)境變量PATH里.
BTW:?參考文章中只安裝了cmake, 沒有安裝gcc. 相當于只安裝了make, 但程序沒法編譯鏈接, 有點坑.
3. VSCode配置
在作VSCode配置的配置工作之前, 有2個前提條件.
第1個前提, 需要VSCode已安裝下面4個插件:

第2個前提, 需用VSCode隨便打開一個目錄.
下面的配置操作,都是以VSCode已打開一個目錄為前提, 不然很多配置選項出不來.
(當然這2點前提參考文章也未提及).
3.1 配置C/C++工具鏈
VSCode配置C/C++工具鏈,?Shift+Ctl+P
調(diào)出搜索框,輸入 C/C++ 后從下拉框中選擇C/C++: Edit Configurations (UI)
在編譯器路徑中輸入:D:/msys64/mingw64/bin/gcc.exe
?(同樣取決于你的MSYS2安裝目錄而定)
3.2 配置CMake tools
VSCode配置CMake tools,?Shift+Ctl+P
調(diào)出配置搜索框,輸入?cmake:scan?會自動顯示出CMake:Scan for kits
,點擊它,
VSCode會自動掃描機子上的已安裝的工具鏈,并在C:\Users\admin\AppData\Local\CMakeTools\
目錄下生產(chǎn)文件cmake-tools-kits.json
, 并填充內(nèi)容如下:
OK,?CMake tools配置完畢!
這里和?參考文章?中差別還是蠻大, 參考文章中的
cmake-tools-kits.json
文件內(nèi)容如下:
后面多了一大坨東東.
而且它還有這樣的描述:
其中 “CMT_MINGW_PATH” 是我手動改的,自動生成的是 “PATH”,我從網(wǎng)上看到需要這么改,具體原理未知。
這說明它還手動修改了一些內(nèi)容.
而我直接用VSCode自動生成的, 未作任何修改, 就完全OK了! 后續(xù)的操作也沒收影響!
4. 下載安裝SDL
SDL的官網(wǎng)可找到SDL Release下載鏈接, 其下載頁面也是在github, 選擇SDL2-devel-2.26.4-mingw.zip
下載, 文件不算大, 15MB, 我直接用github的鏈接也成功下下來了.
下載后, 解壓, 進入?SDL2-2.26.4\x86_64-w64-mingw32
?目錄, 里面有4個目錄:
bin
include
lib
share
將這4個目錄下的內(nèi)容, 分別依次復制到?MINGW64工具鏈目錄?下的?對應同名目錄?下. (我的工具鏈目錄是D:\msys64\mingw64)
到此, VSCode里的SDL2的開發(fā)環(huán)境 都已經(jīng)準備好!
5. 測試程序
接下來, 整個測試程序來試驗一下吧.
先新建一個工程目錄, 用VSCode打開此目錄,?shift+ctrl+p
?打開搜索框, 輸入CMake:Quick Start
, 會自動創(chuàng)建一個工程,并生成CMakeLists.txt
.
我對CMake沒有去學過, 并不太了解, 我的理解?CMakeLists.txt?文件之于?CMake, 就像?Makefile?文件之于?Make.
還需要對這個自動生成的?CMakeLists.txt?文件, 做些修改, 在?add_executable(….)?行的后面加入如下3個庫鏈接:
其中 xxx 應改為 編譯生成的目標可執(zhí)行文件名.
參考文章中聲稱: "這3個庫鏈接一定要按照以上順序添加, 否則會報 WinMain 無法找到的錯誤".
我也懶得, 故意打亂順序測試一下 它這說法 是否真切?
我的最終修改后的CMakeLists.txt?文件全文如下:
其中main.cpp是程序源文件,?aaa是最終編譯生成的 可執(zhí)行文件名.
源文件的代碼 如下:
這個源文件copy自參考文章?(BTW:不過它把其中一個else寫成了elsea, 又被它小小的坑了一下).
按F7
VSCode會自動編譯, 編譯成功之后, 在工程目錄的build目錄下生成aaa.exe
可執(zhí)行文件.
可直接雙擊運行, 運行的效果是 "出現(xiàn)一個如下圖的空白窗口, 2秒鐘后自動關閉".

OK, SDL2開發(fā)環(huán)境順利驗證完成!