Visual Studio 其實從 2017 開始、就有支援 CMake 這個跨平台的建置工具(官網)了。
不過他整個操作邏輯其實和 Visual Studio 傳統的方案/專案(solution / project)架構完全不同,基本上是透過「開啟資料夾」的方法來進行的;而在對於專案的設定上,由於 CMake 本身的特性,所以也有相當大的差異。
也因為沒有特別的需求,所以 Heresy 之前也都沒有認真研究 Visual Studio 在開啟 CMake 專案的時候該怎麼用。
這篇就來稍微紀錄一下、在 Visual Studio 裡面針對 CMake 專案的操作吧~
首先,雖然現在也可以透過 Visual Studio 來建立新的 CMake 專案,但是這邊應該只會來稍微講一下怎麼開啟既有的 CMake 專案、建立專案的部分會先跳過。
至於拿來測試的專案,這邊就先拿 libjpeg-turbo 這個專案(GitHub)來做測試的例子了~這邊使用的版本是 3.0.1(release),下載後解壓縮就可以了。
開啟 CMake 專案資料夾
要用 Visual Studio 開啟 CMake 的專案,基本上只要在執行 Visual Studio 的起始畫面、選取「開啟本機資料夾」就可以了。或者,也可以在進入主介面後,點選選單的「檔案」、「開啟」、「資料夾」或「CMake」就可以了;如果是點選 CMake 的話,則是要去開啟專案裡面的 CMakeLists.txt
這個檔案。
在開啟後,預設應該會自動開啟「CMake 概觀頁面」,裡面會提供一些連結可以參考。
如果是第一次開啟這個 CMake 專案,那他會針對專案與環境進行分析,在「輸出」裡面,會看到他分析的過程記錄(上圖左下角)。這邊的結果會被記錄下來,所以除非手動清除,否則之後開啟同一個專案不會再進行。
而在「CMake 概觀頁面」左邊還有一個「跨平台開發」的分頁,點進去後會看到自己的 Visual Studio 系統目前對於在 Linux 環境開發的設定完成度。
而這的時候,在「方案總管」的窗格,預設會是「資料夾檢視」模式,也就是它會顯示 CMake 專案整個資料夾的樹狀結構。
但是這樣的檢視方式其實個人覺得不是很方便,所以建議這時候可以點選方案總管右鍵選單選的「切換至 CMake 目標檢視」、來切換檢視模式;或者是點選選單的「檢視」、「CMake 目標」、也會有同樣的效果。
在切換到「CMake 目標檢視」模式後,方案總管的顯示方式就會比較接近本來方案/專案的架構,列出來許多建置的目標了。
而如果展開的話,底下也可以看到他會使用到的檔案;如此一來,要編輯或開始偵錯、也比較方便了。
建置與執行
理論上,在這個時候,比較單純的 CMake 專案應該就已經可以開始建置、執行了。
而以要建置整個 CMake 專案來說,只要選擇最上層的專案、在右鍵選單裡面,就會有相關的建置、清除、測試的選項了~
而如果想要在偵錯模式下執行的話,則可以在工具列的「選取啟動項目」的部分,選取可以執行的項目。
或者也可以和一般的 MSBuild 專案一樣,在方案總管裡面,選取要執行的目標後,透過右鍵選單中的「設定為啟動項目」來進行操作。
在選好之後,只要按 F5 就可以開始在偵錯模式下執行程式了。
又或者,在目標的右鍵選單裡面,其實也有「偵錯」的選項可以直接選取。
而如果要設定執行時的參數的話,似乎是沒有圖形介面可以設定?
這邊可以透過目標右鍵選單裡面的「新增偵錯組態」、來開啟 launch.vs.json
這個檔案、進行設定。
他一開始的內容可能會是下面的形式:
{ "version": "0.2.1", "defaults": {}, "configurations": [ { "type": "default", "project": "CMakeLists.txt", "projectTarget": "example.exe", "name": "example.exe" } ] }
這邊要自己確認自己要修改的專案,然後在裡面加入「args
」、並用陣列的形式來輸入執行階段的參數。
例如以 libjpeg-turbo 的 example 來說,這邊測試壓縮的參數是「compress d:/test.jpg
」,就是修改成下面的樣子:
{ "version": "0.2.1", "defaults": {}, "configurations": [ { "type": "default", "project": "CMakeLists.txt", "projectTarget": "example.exe", "name": "example.exe", "args": [ "compress", "d:/test.jpg" ] } ] }
這樣就會可以讓 example 產生一個 d:/test.jpg
的檔案了。
CMake 專案設定
有的時候,CMake 專案裡面有的參數會需要另外設定、調整;像是有的專案有相依性的時候,就會需要設定其他需要的函式庫的路徑,才能完成建置。
而在 Visual Studio 裡面要修改 CMake 的設定,則可以在工具列中,點選組態清單中的「館禮組態…」來開啟設定介面。
或者也可以透過方案總管中、CMake 專案的右鍵選單的「xxx 的 CMake 設定」來開啟。
開啟的介面基本上如下:
這邊基本上應該是針對「CMakeSettings.json
」這個檔案,提供一個圖形化的編輯介面。
拉到下方會有「CMake 變數和快取」,一般 CMake 專案要調整的東西,大多應該都是透過調整這邊的變數來做的。
而 Visual Studio 這邊是自動建立一個「x64-Debug」的組態,所以之後如果需要 release 版本、或是其他設定,都可以自己再加入。
再加入新的組態的時候,他提供了相當多元的樣板可以直接使用,裡面也包含了遠端 Linux、WSL、Mingw64 等等方案;而如果是要建立 Windows 上的 release 組態,基本上就是選「x64-Release」。
而像是想要透過 WSL 來建立 Linux 版的話,也可以選取「WSL-GCC-Release」或其他符合自己需求的選項來建立。
而如果是要透過 SSH 來使用遠端的 Linux 伺服器來建置的話,則可以選擇「Linux-GCC-Debug」這類的選項;而這個狀況下,Visual Studio 預設是會把檔案複製到使用者目錄下的「.vs
」這個資料夾裡的。
在建立新的組態後,下面的「CMake 變數和快取」應該會是空的,需要按下「儲存並產生 CMake 快取以載入變數」來讓他處理。
透過這樣的操作,基本上就可以在 Windows 的 Visual Studio 裡面、建立出一個同時可以針對 Windows、Linux 環境進行建置、偵錯的環境了。
要切換的時候也很簡單,只要透過工具列上的祖態清單、就可以切換到自己建立好的祖態了。
不過如果是要調整偵錯的執行參數的話,可能要注意的是一下的,就是 launch.vs.json
這個偵錯組態檔案,裡面針對 Windows 和 Linux 環境的設定是不同的。
同一個程式的 Windows 偵錯組態的「type
」是「default
」、Linux + g++ 的話則是「cppgdb
」,在檔案裡會分成兩個項目來看;但是 WSL 和 remote Linux 則似乎是使用同一個項目。
這邊 CMake 的使用介紹大概就先這樣了。之後會不會來研究怎麼建立 CMake 專案?機會應該不大就是了。
感覺上,由於 CMake 本來就是設計用來跨平台的,所以在 Visual Studio 支援到一定程度後,其實變得要用單一開發介面來進行跨平台偵錯變得算是相當地方便?
相較於此,Visual Studio 本身的 MSBuild 專案雖然也有支援 Linux,但是卻沒辦法整合兩個不同平台的專案,個人是覺得有點可惜。
本系列目錄:
- 基本概念與環境設定
- 一般的 MSBuild 專案
- 使用既有的 Makefile 專案
- CMake 專案
- 不使用專案來除錯