教學課程:在Visual Studio中建立 C++ 跨平台專案

Visual Studio C 和 C++ 開發不再僅限於 Windows。 本教學課程示範如何在 Windows 和 Linux 上使用 Visual Studio for C++ 跨平台開發。 它是以 CMake 為基礎,因此您不需要建立或產生 Visual Studio 專案。 當您開啟包含 CMakeLists.txt 檔案的資料夾時,Visual Studio 會自動設定 IntelliSense 和建置設定。 您可以在 Windows 本機快速開始編輯、建置和偵錯程式代碼。 然後,將您的設定切換為在Linux上執行相同的動作,全都來自Visual Studio內。

在本教學課程中,您會了解如何:

  • 從 GitHub 複製開放原始碼 CMake 專案
  • 在 Visual Studio 中開啟專案
  • 在 Windows 上建置和偵錯可執行檔目標
  • 新增 Linux 電腦的連線
  • 在 Linux 上建置和偵錯同一目標

必要條件

  • 設定 Visual Studio 執行跨平台 C++ 開發

    • 首先, 安裝 Visual Studio ,然後選擇 使用 C++ 進行桌面開發,並使用 C++ 開發 Linux 工作負載。 此最小安裝只有 3 GB。 視您的下載速度而定,安裝不應超過10分鐘。
  • 設定 Linux 電腦執行跨平台 C++ 開發

    • Visual Studio 不需要任何特定的 Linux 發行版本。 OS 可以在實體機器、VM 或雲端中執行。 您也可以使用 Windows 子系統 Linux 版 (WSL)。 不過,在本教學課程中,需要圖形化環境。 這裏不建議使用 WSL,因為它主要是針對命令行作業。

    • Visual Studio 需要 Linux 電腦上的這些工具:C++ 編譯程式、 gdbsshrsyncmakezip。 在 Debian 型系統上,您可以使用此命令來安裝這些相依性:

      sudo apt install -y openssh-server build-essential gdb rsync make zip
      
    • Visual Studio 在已啟用伺服器模式的 Linux 電腦上需要最新版本的 CMake(至少 3.8)。 Microsoft 會產生 CMake 的通用組建,您可以安裝在任何的 Linux 發行版本。 建議您使用此組建,以確保您擁有最新的功能。 您可以在 GitHub 的 Microsoft CMake 存放庫分支中取得 CMake 二進位檔。 移至該頁面並下載與 Linux 電腦上系統架構相符的版本,然後將它標示為可執行檔:

      wget <path to binary>
      chmod +x cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh
      
    • 您會看到執行指令碼的選項 --help。 建議您使用 -prefix 選項來指定在 /usr 路徑中安裝,因為 /usr/bin 是 Visual Studio 尋找 CMake 的預設位置。 下列範例示範 Linux-x86_64 指令碼。 如果您使用不同的目標平臺,請視需要加以變更。

      sudo ./cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh --skip-license --prefix=/usr
      
  • 安裝在 Windows 電腦上的 Git For Windows。

  • GitHub 帳戶。

從 GitHub 複製開放原始碼 CMake 專案

本教學課程使用 GitHub 上的 Bullet Physics SDK。 它為許多應用程式提供碰撞偵測和物理模擬。 SDK 包含可編譯和執行的範例可執行程式,而不需要撰寫其他程序代碼。 本教學課程不會修改任何原始碼或建置腳本。 若要開始,請在已安裝 Visual Studio 的電腦上,從 GitHub 複製 bullet3 存放庫。

git clone https://github.com/bulletphysics/bullet3.git
  1. 在 Visual Studio 主功能表上,選擇 [ 檔案 > 開啟 > CMake]。 流覽至 CMakeLists.txt 您下載之 bullet3 存放庫根目錄中的檔案。

    Screenshot of Visual Studio menu showing File > Open > C Make. A folder has yet to be opened. This is just the menu opened to this point.

    一旦您開啟資料夾,您的資料夾結構就會顯示在 方案總管

    Screenshot of the Solution Explorer window in Folder View mode. It displays the contents of the project (files and folders) and CMakeLists.txt is highlighted.

    此檢視會顯示磁碟的確切內容,而不是邏輯或篩選過的檢視。 根據預設,不會顯示隱藏的檔案。

  2. 選擇 [ 顯示所有檔案] 按鈕,以查看資料夾中的所有檔案。

    Screenshot of the Solution Explorer window with the Show All Files button highlighted. This button sits on top of the solution explorer window and to the right.

切換至目標檢視

當您開啟使用 CMake 的資料夾時,Visual Studio 會自動產生 CMake 快取。 這項作業可能需要一些時間,視您的專案大小而定。

  1. 在 [輸出視窗] 中,選取 [顯示輸出來源],然後選擇 [CMake] 監視快取產生程序的狀態。 作業完成時,會顯示「完成目標資訊擷取」。

    Screenshot of the Output window. The Show output from: dropdown is set to CMake.

    完成此作業之後,會設定 IntelliSense。 您可以建置項目並偵錯應用程式。 Visual Studio 現在會根據 CMakeLists 檔案中指定的目標,顯示解決方案的邏輯檢視。

  2. 使用 [方案總管] 的 [解決方案與資料夾] 按鈕切換至 CMake 目標檢視。

    Screenshot of the Solutions and Folders button in the Solution Explorer. It is selected, showing a dropdown with a choice for c:\projects\bullet3 and another choice for CMake Targets View, which is selected.

    以下是項目符號 SDK 的檢視外觀:

    Screenshot of the Solution Explorer CMake targets view. It contains an entry called BULLET_PHYSICS Project, under which are entries like App_BasicExample (executable), App_ExampleBrowser (executable), and so on.

    目標檢視提供此來源基底的更直觀檢視。 您會看到有些目標是程式庫,有些則是可執行檔。

  3. 展開 CMake 目標檢視中的節點,查看其原始程式碼檔案,無論這些檔案是否可能位於磁碟上。

新增明確的 Windows x64 偵錯組態

Visual Studio 會建立 Windows 的預設 x64 偵錯 組態。 組態是 Visual Studio 了解將為 CMake 使用何種平台目標的方法。 預設組態不會呈現在磁碟上。 當您明確新增組態時,Visual Studio 會建立名為 CMake 設定.json 的檔案。 它會填入您指定之所有組態的設定。

  1. 新增組態。 開啟工具列中的 [ 組態 ] 下拉式清單,然後選取 [ 管理組態]。

    Screenshot of the Configuration drop-down in the toolbar. Manage Configurations... is selected.

    [CMake 設定 編輯器] 隨即開啟。 選取編輯器左側的綠色加號,以新增組態。 [將組態新增至 CMake 設定] 對話框隨即出現:

    Screenshot of the Add Configuration to CMakeSettings dialog. It has entries such as Linux-Debug, x86-Debug. x64-Debug is selected.

    此對話框會顯示 Visual Studio 隨附的所有設定,以及您建立的任何自定義組態。 如果您想要繼續使用 x64-Debug 組態,該組態應該是您新增的第一個組態。 選取 x64-Debug,然後選擇 [ 選取] 按鈕。 Visual Studio 會使用 x64-Debug組態建立 CMake 設定.json 檔案,並將它儲存至磁碟。 您可以直接在 CMakeSettings.json 中變更 name 參數,使用您喜歡的任何組態名稱。

在 Windows 上設定斷點、建置及執行

在此步驟中,我們會偵錯示範專案符號物理連結庫的範例程式。

  1. 在 [方案總管] 中,選取並展開 AppBasicExampleGui。

  2. 開啟 BasicExample.cpp 檔案。

  3. 設定當您在執行中的應用程式中按下時,會叫用的斷點。 Click 事件是在 helper 類別內的方法中處理。 若要快速獲得此結果:

    1. 選取 CommonRigidBodyBase 結構 BasicExample 衍生自 。 它圍繞第30行。

    2. 按一下滑鼠右鍵選擇 [移至定義]。 現在您位於 CommonRigidBodyBase.h 標頭中。

    3. 在來源上方的瀏覽器檢視中,您應該會看到您位於 CommonRigidBodyBase。 您可以在右邊選取要檢查的成員。 開啟下拉式清單,然後選取 mouseButtonCallback 以移至標頭中該函式的定義。

      Screenshot of the Member list toolbar drop-down in the editor window. It list functions such as getRayTo(in x, int y). The mouse button callback method is highlighted.

  4. 將中斷點放在此函式的第一行。 當您在應用程式視窗內按下滑鼠按鈕時,會在 Visual Studio 調試程式下執行時叫用它。

  5. 若要啟動應用程式,請選取工具列中的 [啟動] 下拉式清單。 它是綠色播放圖示,上面寫著「選取啟始專案」。在下拉式清單中,選取 [AppBasicExampleGui.exe]。 可執行檔的名稱現在會顯示在 [啟動] 按鈕上:

    Screenshot of the Visual Studio toolbar launch drop-down. AppBasicExampleGui.exe is selected, but other options are visible such as App_ExampleBrowser.exe, App_HelloWorld.exe, and others.

  6. 選擇 [啟動] 按鈕來建置應用程式和必要的相依性,然後使用附加的Visual Studio 調試程式加以啟動。 一會兒後,正在執行的應用程式即會出現:

    Screenshot of the running application. It's a collection of colored blocks on a yellow plane.

  7. 將滑鼠移至應用程式視窗中,然後按一下按鈕觸發中斷點。 斷點會將Visual Studio帶回前景,編輯器會顯示暫停執行的行。 您可以檢查應用程式變數、物件、線程和記憶體,或以互動方式逐步執行程序代碼。 選擇 [ 繼續] 讓應用程式繼續,然後正常結束。 或者,使用停止按鈕停止 Visual Studio 中的執行。

新增 Linux 組態並連線到遠端電腦

  1. 新增 Linux 組態。 以滑鼠右鍵按一下 [方案總管] 檢視中的 CMakeSettings.json 檔案,然後選取 [新增組態]。 您會看到和以前一樣的 [新增組態至 CMakeSettings] 對話方塊。 這次選取 [Linux-Debug],然後儲存 CMake 設定.json 檔案 (ctrl + s)。

  2. Visual Studio 2019 16.6 版或更新版本 向下卷動至 CMake 設定 編輯器底部,然後選取 [顯示進階設定]。 選取 [Unix Makefiles] 作為 CMake 產生器,然後儲存 CMake 設定.json 檔案 (ctrl + s)。

  3. 在 [組態] 下拉式清單中選取 [Linux-Debug ]。

    Screenshot of the launch configuration drop-down. The visible options are: x64-Debug, Linux-Debug, and Manage Configurations.

    如果您是第一次連線到Linux系統,則會出現 [遠端系統] 對話框 連線。

    Screenshot of the Visual Studio Connect to Remote System dialog.

    對話框具有主機名、埠、使用者名稱、驗證類型和密碼的欄位。 除了 [埠] 設定為 22 且 [驗證類型] 設定為 [密碼] 以外,所有欄位都是空白的。

    如果您已經新增遠端連線,您可以流覽至 [工具>選項>跨平臺 > 連線 ion 管理員] 來開啟此視窗。

  4. 提供 Linux 計算機的連線資訊,然後選擇 [連線]。 Visual Studio 會將該電腦新增為 CMake 設定.json 作為 Linux 偵錯的默認連線。 它也會從遠端電腦提取標頭,因此您會取得 該遠端連線特有的 IntelliSense。 接下來,Visual Studio 會將檔案傳送至遠端計算機,並在遠端系統上產生 CMake 快取。 這些步驟可能需要一些時間,視網路的速度和遠端計算機的電源而定。 您知道當訊息「目標資訊擷取完成」出現在 CMake 輸出視窗中時,即已完成。

在Linux上設定斷點、建置及執行

因為它是傳統型應用程式,因此您必須提供一些更多組態資訊給偵錯組態。

  1. 在 CMake 目標檢視中,以滑鼠右鍵按兩下 [AppBasicExampleGui],然後選擇 [偵錯] 和 [啟動] 設定,以開啟隱藏的 .vs 子資料夾中的 launch.vs.json 檔案。 這對開發環境而言是本機檔案。 如果您想要簽入它並與小組儲存在一起,您可以將它移到專案的根目錄中。 在此檔案中,已新增 AppBasicExampleGui 的組態。 這些預設設定在大部分情況下都正常運作,但不適用於此處。 因為它是桌面應用程式,因此您必須提供一些額外的資訊來啟動程式,以便在Linux電腦上看到它。

  2. 若要在 Linux 電腦上尋找環境變數 DISPLAY 的值,請執行下列命令:

    echo $DISPLAY
    

    在 AppBasicExampleGui 的設定中,有參數陣列 “pipeArgs”。 它包含一行:“${debuggerCommand}”。 這是在遠端電腦上啟動 gdb 的命令。 Visual Studio 必須先將顯示匯出至此內容,才能執行該命令。 例如,如果顯示的值是 :1,請修改該行,如下所示:

    "export DISPLAY=:1;${debuggerCommand}",
    
  3. 啟動並偵錯您的應用程式。 開啟工具列中的 [ 選取啟動專案 ] 下拉式清單,然後選擇 [AppBasicExampleGui]。 接下來,選擇工具列中的綠色播放圖示,或按 F5。 應用程式及其相依性建置在遠端 Linux 電腦上,然後透過附加 Visual Studio 調試程序啟動。 在您的遠端 Linux 電腦上,您應該會看到應用程式視窗。

  4. 將滑鼠移至應用程式視窗,然後按下按鈕。 已叫用斷點。 程序執行暫停,Visual Studio 會回到前景,您會看到斷點。 您也應該會在 Visual Studio 中看到 Linux 主控台視窗。 視窗提供遠端 Linux 電腦的輸出,也可以接受 的 stdin輸入。 就像任何 Visual Studio 視窗一樣,您可以將它停駐在您想要查看的位置。 其位置會保存在未來的會話中。

    Screenshot of the Visual Studio Linux Console Window.

    視窗中的輸出表示使用 dlopen/dlsym 動態載入的 C11 函式是確定的,已建立 GL 3.0 內容,並取得直接 GLX 轉譯內容並設為目前。 視窗具有各種版本資訊,適用於GL_VENDOR、GL_VERSION、GL_SHADING_LANGUAGE_VERSION等等。

  5. 您可以檢查應用程式變數、物件、執行緒、記憶體,並使用 Visual Studio 以互動方式逐一檢查程式碼。 但這次,您會在遠端 Linux 計算機上執行所有作業,而不是本機 Windows 環境。 您可以選擇 [繼續] 讓應用程式正常繼續並結束,也可以選擇停止按鈕,如同本機執行一樣。

  6. 查看 [呼叫堆疊] 視窗,並檢視 x11OpenGLWindow 呼叫,因為 Visual Studio 是在 Linux 上啟動應用程式。

    The Visual Studio Call Stack window, showing Linux call stack.

    callstack 會顯示 CommonRigidBodyBase::mouseMoveCallback 上的斷點,以及其前面的呼叫,例如 OnMouseMove、X11OpenGLWindow::p umpMessage 等等。

您的收獲

在本教學課程中,您會直接從 GitHub 複製程式代碼基底。 您已在 Windows 上建置、執行及偵錯,而不需修改。 然後使用相同的程式代碼基底,進行次要組態變更,以在遠端 Linux 計算機上建置、執行及偵錯。

下一步

在 Visual Studio 中深入了解設定和偵錯 CMake 專案: