分享方式:


在 Visual Studio 中設定 Linux MSBuild C++ 專案

Visual Studio 2017 及更新版本支援 Linux。

本主題描述如何設定 MSBuild 型 Linux 專案,如 在 Visual Studio 中建立 Linux MSBuild C++ 專案中所述。 針對 Linux CMake 專案,請參閱 設定 Linux CMake 專案

您可以設定 Linux 專案,以實體 Linux 機器、虛擬機器,或適用於 Linux 的 Windows 子系統 (WSL) 為目標。

Visual Studio 2019 16.1 版和更新版本:

  • 當您以 WSL 為目標時,可以避免建置所需的複製作業,並在以遠端 Linux 系統為目標時取得所需的 IntelliSense。

  • 您可以指定不同的 Linux 目標來進行建置和偵錯。

一般設定

若要檢視組態選項,請選取 [專案 > 屬性] 功能表,或以滑鼠右鍵按一下Solution Explorer中的專案,然後從操作功能表中選取 [屬性]。 [一般] 設定隨即出現。

[屬性頁] 對話方塊 [一般設定] 的螢幕擷取畫面。

預設會建置可執行檔 (.out)。 若要建置靜態或動態程式庫,或使用現有 Makefile,請使用 [組態類型] 設定。

如果您要建置 Windows 子系統 Linux 版 (WSL) ,WSL 第 1 版限制為 64 個平行編譯器。 這受組態屬性 > C/C++ > 一般中的[最大平行編譯作業] 設定所控管。

無論您使用的 WSL 版本為何,如果您想要使用超過 64 個平行編譯器,建議您使用 Ninja 來建置,這通常會更快速且更可靠。 若要使用 Ninja 建置,請使用 [設定內容 > 一般] 中的[啟用累加建置] 設定。

如需屬性頁中設定的詳細資訊,請參閱 Linux 專案屬性頁參考

遠端設定

若要變更與遠端 Linux 電腦相關的設定,請設定出現在 [ 一般] 底下的遠端設定。

  • 若要指定遠端目標 Linux 電腦,請使用 [遠端組建電腦] 項目。 這可讓您選取其中一個先前建立的連線。 若要建立新的項目,請參閱連線到遠端 Linux 電腦一節。

    顯示遠端建置電腦的螢幕擷取畫面。

    Visual Studio 2019 16.7版和更新版本:若要以 Windows 子系統 Linux 版 (WSL) 為目標,請將[平臺工具組] 下拉式清單設定為GCC 以進行Windows 子系統 Linux 版。 其他遠端選項會消失,預設 WSL 殼層的路徑便會出現在其位置:

    顯示 WSL 建置電腦的螢幕擷取畫面。

    如果您有並存的 WSL 安裝,則可以在此處指定不同的路徑。 如需管理多個發行版本的詳細資訊,請參閱管理和設定適用於 Linux 的 Windows 子系統

    您可以在 [組態屬性> 偵錯] 頁面上指定不同的偵錯目標。

  • [遠端組建根目錄] 決定在遠端 Linux 電腦上建置專案的根目錄位置。 除非進行變更,否則這會預設為 ~/projects

  • [遠端組建專案目錄] 是在遠端 Linux 電腦上建置這個特定專案的位置。 這會預設為上面所設定之根目錄下的 $(RemoteRootDir)/$(ProjectName),其會擴充到目前專案後命名的目錄。

注意

若要變更預設 C 和 C++ 編譯器,或用來建置專案的 Linker 和 Archiver,請使用 C/C++ > 一般 區段中的適當專案和 連結器 > 一般 區段。 例如,您可以指定特定版本的 GCC 或 Clang。 如需詳細資訊,請參閱 C/C++ 屬性 (Linux C++) 連結器屬性 (Linux C++)

複製來源 (僅限遠端系統)

注意

當以 WSL 為目標時,本節不適用。

在遠端系統上建置時,會將開發電腦上的來源檔案複製到 Linux 電腦,並在該處進行編譯。 根據預設,Visual Studio 專案中的所有來源都會複製到上方設定中所設定的位置。 不過,也可以在清單中新增其他來源,或者完全關閉複製來源,後者是 Makefile 專案的預設值。

  • [要複製的來源] 決定將哪些來源複製到遠端電腦。 根據預設, @ (SourcesToCopyRemotely) 預設為專案中的所有原始程式碼檔案,但不包含任何資產/資源檔,例如影像。

  • [複製來源] 可以開啟和關閉,以啟用和停用將原始程式檔複製到遠端電腦。

  • 要複製的其他來源 可讓您新增其他來源檔案,這會複製到遠端系統。 您可以指定分號分隔清單,也可以使用 := 語法來指定要使用的本機和遠端名稱︰

C:\Projects\ConsoleApplication1\MyFile.cpp:=~/projects/ConsoleApplication1/ADifferentName.cpp;C:\Projects\ConsoleApplication1\MyFile2.cpp:=~/projects/ConsoleApplication1/ADifferentName2.cpp;

建置事件

因為所有編譯都是在遠端電腦 (或 WSL) 上進行,所以已在 [專案屬性] 的 [建置事件] 區段中新增數個額外建置事件。 這些是 [遠端建置前事件]、[遠端連結前事件] 和 [遠端建置後事件],並且在程序中的個別步驟之前或之後發生於遠端電腦上。

[屬性頁] 對話方塊的螢幕擷取畫面,其中顯示 [建置事件]。

適用於遠端系統標頭的 IntelliSense

當您在 [連線管理員] 中新增連線時,Visual Studio 會自動偵測遠端系統上編譯器的 Include 目錄。 Visual Studio 接著會壓縮這些檔案,並將其複製到本機 Windows 電腦上的目錄中。 之後,每當您在 Visual Studio 或 CMake 專案中使用該連線時,這些目錄中的標頭就會用來提供 IntelliSense。

注意

在 Visual Studio 2019 16.5 版和更新版本中,遠端標頭複製已經過優化。 開啟 Linux 專案或設定 Linux 目標的 CMake 時,現在會視需要複製標頭。 複製會根據專案的指定編譯器,在每個專案的背景中發生。 如需詳細資訊,請參閱 Linux IntelliSense 的精確度和效能改善

這項功能取決於已安裝 ZIP 的 Linux 電腦。 您可以使用這個 apt-get 命令來安裝 ZIP:

sudo apt install zip

若要管理標頭快取,請流覽至 [工具 > 選項]、[跨平臺 > ] > Connection Manager [遠端標頭 IntelliSense 管理員]。 若要在 Linux 電腦上進行變更後更新標頭快取,請選取遠端連線,然後選取 [更新]。 選取 [刪除] 來移除標頭,但不刪除連線本身。 選取 [探索],在檔案總管中開啟本機目錄。 將此資料夾視為唯讀。 若要下載 Visual Studio 2017 15.3 版之前所建立之現有連線的標頭,請選取連線,然後選取 [ 下載]。

顯示 [選項] 對話方塊的螢幕擷取畫面,其中已選取 [跨平臺 > Connection Manager > 遠端標頭 IntelliSense 管理員]。

顯示 [選項] 對話方塊的螢幕擷取畫面,其中已選取 [跨平臺 > Connection Manager]。

您可以啟用記錄來協助針對問題進行疑難排解:

[選項] 對話方塊的螢幕擷取畫面,其中顯示 [遠端記錄] 選項。

Linux 目標地區設定

Visual Studio 語言設定不會傳播至 Linux 目標,因為 Visual Studio 不會管理或設定已安裝的套件。 [輸出] 視窗中顯示的訊息,例如組建錯誤,會使用 Linux 目標的語言和地區設定來顯示。 您必須為所需的地區設定設定 Linux 目標。

另請參閱

Set compiler and build properties (設定編譯器及組建屬性)
C++ 一般屬性 (Linux C++)
VC++ 目錄 (Linux C++)
複製來源專案屬性 (Linux C++)
建置事件屬性 (Linux C++)