1. 首页
  2. >
  3. 编程技术
  4. >
  5. C++

VS2019 v16.3跨平台开发四件套

Microsoft确实是Loves Linux啊

在VS2019中,我们可以在单个IDE中同时面向Windows和Linux平台进行开发,这要是在Ballmer时期,确实是不大可能发生的事情。

通过使用VS中对CMake的原生支持,我们可以在VS中直接打开任何包含C++代码和CMakeLists.text的目录,进行编码,并面向Windows, Linux和WSL(Windows Subsystem for Linux)这三种目标平台进行构建并调试。

如果我们的工程是一个MSBuild工程,没关系,可以通过VS的MSBuild-based Linux support组件,来创建和调试控制台工程,这个控制台工程将会正常运行在一台远程的Linux系统或WSL中。当然了,我们需要事先安装好Linux Development with C++ workload这个套件。

新版本VS2019 v16.3 Preview 2中,开发团队对原生CMake支持,MSBuild-based Linux工程进行了一系列改进,那今天我们就来看看。

在CMake工程中快速安装vcpkg代码库

vcpkg是一个跨越Windows, Linux和MacOS的代码库管理器。在VS2019 v16.3中,开发团队改进了vcpkg与VS的集成,具体来说,可以在CMake工程中使用vcpkg toolchain文件和执行”vcpkg integrate install”指令,这样,我们就可以快速的安装一个丢失的代码库(及其依赖),如下图所示:

VS2019 v16.3跨平台开发四件套

在上图中,选择”Install package…”,可以自动安装目标代码库及其所有的依赖,并在VS的输出窗口显示安装进度。


CMake配置编辑器

在本次更新中,开发团队提供了CMake配置管理器,这样在配置CMake工程时就更加简单了。在下图中,我们可以看到一种图形化的配置CMake工程的方法,其中有一些链接,点击这些链接,可以直接打开相关的文档。

VS2019 v16.3跨平台开发四件套


在CMake配置编辑器中,它直接将VS的配置项映射至CMake工程的环境变量,例如CMake中的配置类型CMAKE_BUILD_TYPE。另外,还可以配置诸如vcpkg, rsync之类的工具。

Linux项目:头文件性能提升

当我们在VS中针对一个远程Linux系统构建项目时,VS会自动从远程系统中拷贝头文件到Windows上,并通过IntelliSense功能,让我们感觉就像是在远程机器上开发一样。

在VS2019 v16.3 Preview 2中,远程头文件拷贝已经得到了优化并且可以以并行的方式进行。这个优化措施对于大型代码工程非常有作用,你无需再等上很长时间更新头文件了。具体例子,我们如果要构建MySQL Server这个开源库,初次头文件更新将比优化之前的版本快将近30%。

值得注意的是,这个改进同时适用于CMake Linux工程和MSBuild Linux工程。开发团队还打起了包票:后面关于Linux工程的IntelliSense改进已经在路上了,请大家Stay tuned。

对WSL的原生支持的改进

在VS2019 v16.1中,开发团队官宣native support for C++ with WSL。这个特性可以在不添加远程连接或配置SSH的情况下直接对本机的WSL工程进行构建和调试。

新版本VS2019 v16.3 Preview 2中,开发团队增加了对MSBulid工程的并行构建支持。我们可以在VS中配置并行编译的最大数量,如下图所示:

VS2019 v16.3跨平台开发四件套


同时,开发团队还添加了对WSL构建事件通知的新特性。通过使用这些事件,我们可以在编译前,链接前或者编译后添加自定义的命令行,从而对这些重要的构建时间节点进行自定义的处理。如下图所示:

VS2019 v16.3跨平台开发四件套


其他已解决的问题

各位朋友在使用过程中如果发现任何问题或者有任何建议,都可以通过Developer Community联系到开发团队成员。

下面是在VS2019 v16.3中已经修正了关于C++跨平台开发的一些问题,供各位参考:

VS2019 wipes CMake build directory each time I touch CMakeLists.txt

CTest’s add_test passes incorrect number of arguments to command

CMake cache generation always deletes build directory if toolchain path has backslashes

CMake Targets View – Targets have no CMakeLists.txt if add_executable(/library) is called from a function defined in an included file

CMake MSVC_TOOLSET_VERSION is incorrect in Visual Studio 2019

VS API issue on CMake solutions in VS 16.2 Preview

总结

本文主要对使用VS进行跨平台开发的一些更新要点进行了汇总,我突然明白:VS这是要在IDE领域掀起一番腥风血雨啊。。。Eclipse, 发抖了吗?