在visualstudio2019中,您可以通过一个IDE轻松地针对Windows和Linux。在 Visual Studio 2019版本16.1预览版3 我们宣布了一些特定于 Linux工作负载 :本机支持 Windows Linux子系统(WSL) , 地址消毒剂集成 ,以及分离构建和调试目标的能力。如果您刚刚开始跨平台开发,我建议您尝试我们的 对WSL的本机支持 .
对Windows Linux子系统(WSL)的本机支持
VisualStudio现在提供了使用C++的本地支持 WSL公司 . WSL允许您直接在Windows上运行轻量级Linux环境,包括大多数命令行工具、实用程序和应用程序。在visualstudio中,为了在本地WSL安装上构建和调试,您不再需要添加远程连接或配置SSH。查看我们的 在visualstudio中发布对WSL的本机支持 要了解更多信息,请遵循入门指南。
Linux工作负载的AddressSanitizer
在VisualStudio2019版本16.1预览版3中,我们集成了 地址消毒剂 (ASan)进入visualstudio for Linux项目。ASAN是一个C/C++的运行时内存错误检测器。您可以为启用ASan 基于MSBuild的Linux项目 和 CMake项目 目标是远程Linux机器或WSL。查看我们的 visualstudio中Linux工作负载的post-on-AddressSanitizer 更多信息。
Linux项目的独立构建和调试目标
更新1/27/2020:在VisualStudio2019版本16.5及更高版本中,您可以利用VisualStudio的 将构建系统与远程部署系统分离时对WSL的本机支持 .
现在,您可以将远程生成计算机与远程调试计算机分离,以实现这两个目的 基于MSBuild的Linux项目 和 CMake项目 目标是远程Linux机器。例如,您现在可以在x64上交叉编译,并在针对物联网场景时部署到ARM设备。
对于基于MSBuild的Linux项目,可以在项目的属性页(配置属性>调试>远程调试计算机)中指定新的远程调试计算机。默认情况下,此值与远程生成计算机同步(配置属性>常规>远程生成计算机)。
下拉菜单中填充了所有已建立的远程连接。至 添加新的远程连接 ,导航到“工具”>“选项”>“跨平台”>“连接管理器”,或在屏幕顶部的搜索栏中搜索“连接管理器”。您还可以在项目的属性页(配置属性>常规>远程部署目录)中指定新的远程部署目录。
默认情况下,只有进程调试所需的文件才会部署到远程调试计算机。您可以查看/配置将通过解决方案资源管理器部署的源文件。单击源文件时,将在解决方案资源管理器的正下方看到其文件属性的预览。也可以右键单击源文件并选择“属性”
“Content”属性指定是否将文件部署到远程调试计算机。您还可以通过导航到Property Pages>Configuration Manager并取消选中所需配置的“Deploy”来完全禁用部署。
如果要完全控制项目的部署(例如,要部署的某些文件不在解决方案中,或者要自定义每个文件/目录的远程部署目录),则可以将以下代码块附加到.vcxproj文件中:
<ItemGroup> <RemoteDeploy Include="__example.cpp"> <!-- This is the source Linux machine, can be empty if DeploymentType is LocalRemote --> <SourceMachine>$(RemoteTarget)</SourceMachine> <TargetMachine>$(RemoteDebuggingTarget)</TargetMachine> <SourcePath>~/example.cpp</SourcePath> <TargetPath>~/example.cpp</TargetPath> <!-- DeploymentType can be LocalRemote, in which case SourceMachine will be empty and SourcePath is a local file on Windows --> <DeploymentType>RemoteRemote</DeploymentType> <!-- Indicates whether the deployment contains executables --> <Executable>true</Executable> </RemoteDeploy> </ItemGroup>
对于以远程Linux机器为目标的CMake项目,可以通过 启动.vs.json . 默认情况下,“remoteMachineName”的值将与中的“remoteMachineName”属性同步 CMakeSettings.json文件 ,它对应于远程生成计算机。这些属性不再需要匹配,launch.vs.json中的“remoteMachineName”值将指示用于部署和调试的远程计算机。
IntelliSense将建议所有已建立的远程连接的列表,但您可以 添加新的远程连接 导航到“工具”>“选项”>“跨平台”>“连接管理器”,或在屏幕顶部的搜索栏中搜索“连接管理器”。
如果希望完全控制部署,可以将以下代码块附加到launch.vs.json:
"disableDeploy": false, "deployDirectory": "~foo", "deploy" : [ { "sourceMachine": "127.0.0.1 (username=example1, port=22, authentication=Password)", "targetMachine": "192.0.0.1 (username=example2, port=22, authentication=Password)", "sourcePath": "~/example.cpp", "targetPath": "~/example.cpp", "executable": "false" } ]
已解决的问题
向C++团队报告问题或建议特性的最好方法是通过 开发者社区 . 在VisualStudio 2019 16.1预览2或预览3中,最近解决了与C++跨平台开发有关的以下反馈票:
如果SSH在构建远程Linux CMake项目时出现连接错误,VS2017将崩溃
CMake:对CMakeLists.txt的任何微小更改都会触发完全缓存再生
CMake+Intellisense:CMakeLists中的预处理器定义不适用于带引号的字符串
跟我们谈谈!
您对我们在visualstudio中的Linux工具有反馈吗?选择一个时间 与C++跨平台团队聊天 并分享您的经验-好的和坏的-以帮助我们优先考虑和建立正确的功能为您!我们也可以通过下面的评论,电子邮件( visualcpp@microsoft.com ),和Twitter( @ 视觉 )以及( @埃里卡斯韦特_ ).