漫漫开发路 Studio开发CPP应用: 增量编译和Shell支持,使用Visual

两项功能改进
VisualStudio2019可以支持开发者在单一集成开发环境(IDE)下开发面向Windows和Linux(包括WindowsSubsystemforLinux)的应用 。 VisualStudio2019v16.7Preview3进一步在Linux开发中引入了两项新的特性:
1)针对MSBuildLinux工程的增量编译优化 。
2)增加了更加广泛的Linux发行版和Shell的支持 。
在VisualStudio中 , C++开发者有两种方法可以面向Linux系统开发应用 。 对于任何跨平台开发或者考虑到开源目的的开发 , 我们的建议是使用带有原生支持的CMake 。 这可以实现使用同一套源代码来编写面向不同目标平台编译脚本 。 另外 , 你可以可以创建基于MSBuild的Linux工程来获得熟悉的VisualStudio开发体验 。
针对MSBuildLinux工程的增量编译优化
在MSBuildLinux工程中 , 现在你可以使用Ninja来实现更快的增量编译了 。 可以通过在VisualStudio的工程属性中的[General]设置页设置[EnableIncrementalBuild]为[WithNinja]即可启用Ninja增量编译 。 如下图所示:
漫漫开发路 Studio开发CPP应用: 增量编译和Shell支持,使用Visual
文章图片
请确保在Linux系统上已经安装了Ninja 。 可以使用如下的指令在基于Debian的Linux系统上安装Ninja:
#sudoapt-getupdate
#sudoapt-getinstallninja-build
我们对一个包含了1000个.h头文件和1000个.cpp源文件的MSBuildLinux工程进行了性能测试 。 测试结果表明 , 使用了Ninja之后 , 对完整编译和增量编译(仅修改了一个头文件)所需要的时间大为减少 , 测试结果如下表所示:
漫漫开发路 Studio开发CPP应用: 增量编译和Shell支持,使用Visual
文章图片
在上述的测试中 , 我们使用了一台Ubuntu20.04的虚拟机 , 并在VisualStudio中使用SSH连接到这台虚拟机 。 你也可以我们对SSH的支持和本机WSL的支持来获得这些优化 。
温馨提示:你可以在通过在工程属性[General]平台Toolset中选择WSL或者Remote , 以对WSL或者远程Linux修改平台Toolset 。
对更加广泛的Linux发行版和Shell的支持
我们同时也添加了对更加广泛的Linux发行版和Shell的支持 。 这些变更主要应用在面向远程Linux系统或者WSL的CMake工程和MSBuildLinux工程 。
VisualStudio会在第一次执行Shell指令的时候向目标系统发起询问 。 然后它会决定这条指令在重定向stderr时如何格式化 , 并从正在运行中的命令行中脱离 。
VisualStudio现在可以支持的Shelll如下:
sh,csh,bash,tcsh,ksh,zsh,和das
如果检测到不支持的LinuxShell , 则我们会回退到”sh”环境 。
另外 , 我们还在ConnectionManager.exe中添加了新的选项和命令 , 这些选项和命令将会帮助你覆盖远程连接建立后默认的Shell选择 。
ConnectionManager.exe是一个命令行工具 , 它主要用来在VisualStudio之外管理和维护远程连接 。
其主要使用方法如下:
>ConnectionManager.exelist–-properties
当执行上述指令时 , 目标连接的所有属性会以列表的方式呈现出来 。
>ConnectionManager.exemodify[default|connection_id|user@host[--portport]]–-property[key=value]
上述指令主要用来定义或修改一个现有连接的属性 。 如果”value”是空的 , 则属性”key”将会被删除 。 举个例子 , 使用如下的指令
ConnectionManager.exemodify21212121–-propertyshell=csh
可以覆盖ID为212121的连接的默认Shell 。
你还可以执行如下指令来按连接ID来查看所有存储的连接列表:
ConnectionManager.exelist
最后 , 我们测试了所有这些新支持的LinuxShell 。 类似于新建工程 , 远程头文件同步 , 调试等这些关键性的功能都得到了测试 , 这些测试都面向了CMake工程和MSBuildLinux工程 , 并使用到了如下列出的LinuxShell 。