速读 – VS2019 v16.5 Preview2 迎来一小波更新

速读 – VS2019 v16.5 Preview2 迎来一小波更新

作者:BlogUpdater |  时间:2020-02-13 |  浏览:148 |  评论已关闭 条评论

蝎子

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对这些改进进行了测试。具体测试场景为:如果一个源文件发生了变化,则将会触发远程系统源文件同步更新,当用户调试应用程序时,生成的可执行文件将会被重新编译。
测试结果如下:

当没有启用优化时,一个完全嵌套式的拷贝将会从CMake根目录开始执行。如果使用了上述中的优化措施,则VS会检测到单个文件的变化,并使用sftp来拷贝这个发送变化的文件,这显著的提高了拷贝性能。

默认情况下,这些优化已经处于启用状态。下图中的新的选项参数可以被添加到CMakeSettings.json文件中来自定义文件拷贝行为:

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的目标视图中随时修改工程的编译目标。

在某些情况下,可能在多个地方需要添加源文件到CMake工程脚本中,当出现这种情况时,Visual Studio会提示哪些地方需要进行变更并显示变更预览:

在Visual Studio 2019 v15.5 Preview 2中,这个特性默认被启用,但是你可以随时关闭它:[Tools > Options > CMake, “Enable automatic CMake script modification…]。

CMake language services
另外,在新版本的Visual Studio中可以更加简单的支持复杂CMake工程的开发。类似[Go To Definition]和[Find All References]这样的功能现在已经可以支持CMake工程脚本中的变量,函数和目标了。

这些代码导航功能可以应用在整个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]中找到有关这些按键的设置项,如下图所示:

总结
日新月异,斗转星移,感谢Visual Studio开发团队的辛苦工作,为我们这些”干活的”带来了如此爽快的开发体验。
你们开发的爽,我们用起来也爽,但是,我们学起来,也是比较苦逼的。

标签:

评论已关闭。