新鮮特性出爐:VS2019 v16.5 預覽版2 更新一覽

蠍子

VS對CMake的原生支持,可以實現在同一個IDE中面向Windows和Linux平臺編寫應用程序。在最新版的VS2019 v16.5 Preview 2中,我們為跨平臺開發引入了一些新的功能特性,如下:

  • File copy optimizations for CMake projects targeting a remote Linux system
  • Native WSL support when separating your build system from your remote deploy system
  • The ability to easily add, remove, and rename files in CMake projects
  • CMake language services
  • A command line utility to interact with the Connection Manager
  • FIPS 140-2 compliance for remote C++ development
  • IntelliSense improvements for both CMake projects and MSBuild-based solutions

File copy optimizations for CMake projects targeting a remote Linux system

在之前的版本中,當在Linux平臺上編譯和調試應用程序時,Visual Studio可以自動的從本機Windows拷貝源文件到目標Linux系統。在VS2019 v16.5中,我們優化了這項功能。在新版本中,VS會為文件拷貝操作保留一份”指紋記錄文件”,通過這個文件,VS會根據需要拷貝的文件數量進行一定的優化。具體如下:

1. 如果沒有檢測到文件變化,則不會進行任何拷貝。

2. 如果只有一些文件發生變化,則使用sftp對各個變化的文件進行拷貝。

3. 如果只有一些文件夾發生變化,則會使用一條rsync指令對這些文件夾進行非嵌套式的拷貝。

4. 除上述情況之外,則會使用rsync指令對第一個父級文件夾進行嵌套式的拷貝。

我們使用LLVM對這些改進進行了測試。具體測試場景為:如果一個源文件發生了變化,則將會觸發遠程系統源文件同步更新,當用戶調試應用程序時,生成的可執行文件將會被重新編譯。測試結果如下:

新鮮特性出爐:VS2019 v16.5 預覽版2 更新一覽

當沒有啟用優化時,一個完全嵌套式的拷貝將會從CMake根目錄開始執行。如果使用了上述中的優化措施,則VS會檢測到單個文件的變化,並使用sftp來拷貝這個發送變化的文件,這顯著的提高了拷貝性能。

默認情況下,這些優化已經處於啟用狀態。下圖中的新的選項參數可以被添加到CMakeSettings.json文件中來自定義文件拷貝行為:

新鮮特性出爐:VS2019 v16.5 預覽版2 更新一覽

remoteCopyOptimizations選項的可選參數有:RsyncAndSftp(默認值),RsyncOnly和None(這個參數表示總是執行嵌套式完全拷貝)。選項rsyncSingleDirectoryCommandArgs主要是在非嵌套式拷貝時來自定義同步的行為。除此之外,還有remoteCopySources,rsyncCommandArgs(用來定義嵌套式拷貝的行為),另外,rsyncCopySourcesMethod也同樣可以定義文件拷貝行為,對於這些參數的具體使用方法,請參考CMake Linux工程的”更多設置”裡的幫助文檔。

請注意,這些性能優化主要是針對遠程連接。對於WSL,可以通過VS對WSL的支持來直接訪問Windows文件系統中的源文件,而不需要任何的拷貝和維護工作。

Native WSL support with the separation of build and deploy

VS2019 v16.1中引入了一種新的機制,來將遠程編譯系統從遠程部署系統中隔離出來。在VS2019 v16.5中,這個特性被擴展到了WSL的支持範疇。也就是說,現在你可以在WSL中進行本機編譯,然後使用SSH在另外一臺遠程Linux系統上進行部署或調試。

Separation of build and deploy with CMake projects

在CMake配置編輯器中我們指定了用於編譯的Linux系統。如果要在WSL上進行本機編譯,則可以導航到CMake配置編輯器(Configuration下拉菜單 > Manage Configurations),然後添加一個新的WSL配置。你可以根據你想使用的工具集來自由選擇WSL-GCC-Debug或者WSL-Clang-Debug。

在配置文件launch.vs.json中可以指定用於調試的遠程Linux系統。為了在另一臺遠程Linux系統上進行調試,可以向這個配置文件中添加一個新的遠程Linux配置,然後選擇[C/C++ Attach for Linux (gdb)]。如需要了解更多關於自定義配置和編譯部署隔離相關的知識,請查看[launch.vs.json reference for remote Linux projects]這個幫助文檔。

請注意,[C/C++ Attach for Linux (gdb)]配置是用來調試遠程Linux系統的。如果你希望在同一個WSL實例上編譯和調試應用程序,可以在launch.vs.json中添加一個新的[C/C++ Launch for WSL]配置項,具體可以參考[entry points to launch.vs.json]這篇文章。

Separation of build and deploy with MSBuild-based Linux projects

在Linux工程屬性頁面中,我們可以指定用於編譯的Linux系統。如果需要在WSL進行本機編譯,則可以在工程配置的[常規]中選擇不同的平臺工具集。根據希望使用的工具集,可以選擇[GCC for Windows Subsystem for Linux]或者[Clang for Windows Subsystem for Linux]。

默認情況下,Visual Studio是在WSL中進行編譯和調試。如果希望指定在另一臺遠程系統中進行調試,可以導航至配置屬性頁面的[Debugging]頁面,然後設置[Remote Debug Machine]到一個指定的遠程連接。你可以通過連接管理器添加新的遠程連接,也可以通過[Remote Deploy Directory]來指定遠程系統上用於部署的目錄路徑。

Easily add, remove, and rename files in CMake projects

在新版本的Visual Studio中,和CMake工程打交道變得更加的簡單了。現在,你可以在IDE中直接對CMake工程中的源文件進行添加,刪除和重命名操作,而不需要手動的修改CMake腳本。當你再Solution Explorer中添加或刪除文件時,Visual Studio將自動為你修改CMake工程腳本。你也可以在Solution Explorer的目標視圖中隨時修改工程的編譯目標。

新鮮特性出爐:VS2019 v16.5 預覽版2 更新一覽

在某些情況下,可能在多個地方需要添加源文件到CMake工程腳本中,當出現這種情況時,Visual Studio會提示哪些地方需要進行變更並顯示變更預覽:

新鮮特性出爐:VS2019 v16.5 預覽版2 更新一覽

在Visual Studio 2019 v15.5 Preview 2中,這個特性默認被啟用,但是你可以隨時關閉它:[Tools > Options > CMake, “Enable automatic CMake>

CMake language services

另外,在新版本的Visual Studio中可以更加簡單的支持複雜CMake工程的開發。類似[Go To Definition]和[Find All References]這樣的功能現在已經可以支持CMake工程腳本中的變量,函數和目標了。

新鮮特性出爐:VS2019 v16.5 預覽版2 更新一覽

這些代碼導航功能可以應用在整個CMake工程範圍,它們提升了開發人員的生產力,因為開發人員不再需要在一大堆文件和文件夾中進行文本搜索,同時,這些功能也整合了其他IDE生產力特性,例如[Peek Definition]。關於CMake工程的其他更多信息,敬請期待後面的文章。

Command line utility to interact with the Connection Manager

在Visual Studio 2019 v16.5及其更新版本中,你可以使用命令行工具來以編程的方式來添加或刪除遠程連接。這個功能對於創建一個新的開發環境或者在持續集成環境中設置Visual Studio時非常有用。關於這個命令行工具的使用方法和參數介紹,請參考文檔。

FIPS 140-2 compliance for remote C++ development

Federal Information Processing Standard (FIPS) 140-2版是美國政府為數據加密提出來的一項標準。關於這標準的實現的驗證,是由NIST負責執行的。從Visual Studio v16.5開始,使用C++來面向遠程Linux系統做開發已經符合FIPS 140-2標準。關於這一特性的更多信息,可以參考[step-by-step instructions to set up a secure, FIPS-compliant connection between Visual Studio and your remote Linux system]這篇文章。

IntelliSense improvements

IntelliSense在新版本中也得到了強化,在和標準庫打交道時,它可以顯示更加具有可讀性的類型名稱,舉個例子,在[Quick Info]提示中,原本的提示內容std::_vector_iterator變為了_std::vector::iterator。

另外,我們也對回車,空格和Tab按鍵的快捷響應。當你在一個CMake或者MSBuild工程中工作時,你可以在[Tools > Options > Text Editor > C/C++ > Advanced > IntelliSense]中找到有關這些按鍵的設置項,如下圖所示:

新鮮特性出爐:VS2019 v16.5 預覽版2 更新一覽

總結

日新月異,斗轉星移,感謝Visual Studio開發團隊的辛苦工作,為我們這些”幹活的”帶來了如此爽快的開發體驗。你們開發的爽,我們用起來也爽,但是,我們學起來,也是比較苦逼的。


分享到:


相關文章: