在 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 安裝,則可以在此處指定不同的路徑。 如需管理多個發行版本的詳細資訊,請參閱管理和設定適用於 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 版之前所建立之現有連線的標頭,請選取連線,然後選取 [ 下載]。
您可以啟用記錄來協助針對問題進行疑難排解:
Linux 目標地區設定
Visual Studio 語言設定不會傳播至 Linux 目標,因為 Visual Studio 不會管理或設定已安裝的套件。 [輸出] 視窗中顯示的訊息,例如組建錯誤,會使用 Linux 目標的語言和地區設定來顯示。 您必須為所需的地區設定設定 Linux 目標。
另請參閱
Set compiler and build properties (設定編譯器及組建屬性)
C++ 一般屬性 (Linux C++)
VC++ 目錄 (Linux C++)
複製來源專案屬性 (Linux C++)
建置事件屬性 (Linux C++)