在 Windows 上用 Visual Studio 開發 Linux 程式

| | 0 Comments| 11:46
Categories:

雖然 Heresy 這邊工作的環境主要還是以 Windows 的程式開發為主,但是其實寫的 C++ 程式基本上大多都還是有考慮跨平台、讓程式可以在 Linux 環境上建置和運作的。不過,由於 Windows 上的 Visual Studio 用得很習慣,所以其實在 Linux 上還真的不太清楚該怎麼偵錯比較方便?

雖然微軟有推出跨平台的 Visual Studio Code、而且現在已經被廣泛使用了(感覺上 VSCode 的延伸模組比 VS 還多了…),但是由於它的操作邏輯、方法和 Visual Studio 其實算是完全不同的,所以 Heresy 也不熟系。

該怎麼辦呢?其實 Visual Studio 2015 開始,就已經有提供 Linux 偵錯的功能了!Heresy 後來寫一篇《在 Windows 寫 Linux 程式:Visual Studio + Windows Subsystem for Linux》來記錄一下怎麼透過 WSL 來玩這個方案。後來到了 Visual Studio 2017 也還支援 CMake 這套跨平台的建置方案,讓 Visual Studio 的功能更強。

所以這邊呢,就來稍微研究一下要怎麼用 Visual C++ 來針對 Linux 的程式做偵錯、甚至是開發吧!這邊主要是參考官方的《Linux development with C++ | Create and debug applications for Linux》。


基本概念

要使用 Visual Studio 的 IDE 來開發、或是對 Linux 的程式偵錯,主要是以「遠端偵錯」的概念來進行的。

所以除了安裝了 Visual Studio 的電腦外,還需要一個 Linux 環境,用來執行、建置 Linux 版的 C++ 程式。

以現在的 Windows 來說,最簡單的方法應該就是把 Windows Subsystem for Linux 裝起來了!而如果想要使用實體的 Linux 機器(或者虛擬機器)的話,也是可以讓 Visual Studio 透過 SSH 來控制、進而做到自動化處理的。

而在程式碼的部分,Visual Studio 則是會自動同步到 Linux 端(使用 WSL 的話應該是不用額外同步),所以在 IDE 裡面修改的東西會自動更新,算是滿方便的。

至於實際上建置和偵錯的工具,則是 Linux 上的 g++ / gdb 或 clang / LLDB,這部分基本上可以自己選擇。

而這些操作都需要一些前置作業,這邊可以參考微軟官方的《Download, install, and set up the Linux workload》,下面也會做簡單的說明。

至於在專案的部分,則有分為 MSBuild 和 CMake 兩大類。

其中,CMake 專案由於本來就是為了跨平台設計的,所以在 Visual Studio 中的形式會比較特別,不會有方案檔(solution、.sln)和專案檔(project、.vcxproj)的存在;而也因此,它和其他的專案設定上也會有相當的出入,但是他也是唯一一個可以同時支援 Windows 和 Linux 程式開發的方案。

如果是傳統 Linux 上的 Makefile,基本上也算是可以用 MSBuild 的專案來處理,但是除了得要在手動設定一些東西外、支援的功能也較為有限。


Visual Studio 安裝 Linux 相關元件

Visual Studio 現在功能相當多,所以其實很多東西都變成可選擇安裝、預設不見得會有安裝的了。

而如果要用 Visual Studio 來進行 Linux 的開發,就需要確認自己有沒有安裝「工作負載」(workload)裡面的「使用 C++ 進行 Linux 和內嵌開發」。

如果已經安裝過 Visual Studio 後想要修改或確認的話,可以在開始選單裡面找到「Visual Studio Installer」、然後針對已經安裝的產品進行修改。


Linux 環境的設定

Linux 的部分,是要用來建置、執行程式的環境,所以基本上會需要針對自己的建置需求來做調整;尤其是 g++ 的版本、還有額外需要的函式庫,都可能會需要另外調整,所以沒有一定通用的安裝方法。

不過,微軟的文件裡面也有列出必要的套件。

以 WSL 來說,會需要安裝:

  • g++
  • gdb
  • make
  • rsync
  • zip

其中 g++、gdb、make 都是用來建置用的,如果是要用 clang 而不是 g++ 的話,則是要改安裝 clang 和 lldb;rsync 和 zip 則是用來做檔案同步的,根據微軟的說法還會把 Linux 環境的 header sync 回到給 IntelliSense 用。

而如果是實體/虛擬的 Linux 機器的話,則還會需要 SSH Server 來讓 Visual Studio 可以連入控制,所以還要另外安裝 openssh-server、並啟用 ssh 服務(防火牆也要設定成可以連線)。

另外,如果是要使用 CMake 專案的話,則還會需要 ninja-build。


Visual Studio 遠端電腦設定

如果是使用 WSL 的話,這部分應該是可以直接跳過。

但是如果是使用獨立的 Linux 環境的話,在Linux 端設定好後,還需要到 Visual Studio 裡面設定遠端連線。

這邊的設定位置是主視窗工具列的「工具」、「選項」,然後在開啟的選項視窗左側、找到「跨平台」、「連線管理員」。

這邊主要就是針對 SSH 連線進行設定而已,其介面如下:

要先確認 SSH 能正確連上遠端的 Linux SSH 伺服器,接下來才能繼續玩下去。


Visual Studio 的 Linux 專案

「基本上」,Visual Studio 還是要有一個專案才是比較能正常運作的。而在目前 Visual Studio 2022 中、如果要建立新專案的話,支援的 Linux 專案大致上有下面五種:

  • 空白專案
  • 主控台應用程式(Console)
  • Makefile 專案
  • CMake 專案
  • Raspberry Pi 專案

下面就是建立專案時,使用「C++」和「Linux」過濾的結果:

這邊要注意的是,CMake 的操作邏輯和 Visual Studio 本來的方案、專案的操作邏輯有很大的不同,所以如果不熟的話,可能會碰到很多問題。

整體來說,這邊基本上就是看需求來選擇了。


接下來呢,則預計針對不同的專案、另外來寫幾篇了。

  • 一般的 MSBuild 專案
  • 使用既有的 Makefile 專案
  • CMake 專案
  • 不使用專案來除錯

Leave a Reply

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *