通过


演练:使用 WSL 2 和 Visual Studio 2022 生成和调试 C++

Visual Studio 2022 引入了一套用于开发 适用于 Linux 的 Windows 子系统 版本 2 (WSL 2) 的本机 C++ 工具集。 此工具集现已在 Visual Studio 2022 版本 17.0 或更高版本中提供。

WSL 2 是新的推荐版本的 适用于 Linux 的 Windows 子系统 (WSL)。 它提供更好的 Linux 文件系统性能、GUI 支持和完整的系统调用兼容性。 Visual Studio的 WSL 2 工具集允许使用Visual Studio在 WSL 2 发行版上生成和调试 C++ 代码,而无需添加 SSH 连接。 可以使用 Visual Studio 2019 版本 16.1 中引入的本机 WSL 1 工具集在 WSL 1 发行版上构建和调试 C++ 代码。

Visual Studio的 WSL 2 工具集支持基于 CMake 和 MSBuild 的 Linux 项目。 CMake 是使用 Visual Studio 进行所有 C++ 跨平台开发的建议。 建议使用 CMake,因为它在 Windows、WSL 和远程系统上生成和调试相同的项目。

有关本主题中信息的视频演示,请参阅 Video:使用 WSL 2 分发版调试 C++ 和 Visual Studio 2022.

WSL 2 工具集背景信息

Visual Studio中的 C++ 跨平台支持假定所有源文件都源自Windows文件系统。 面向 WSL 2 发行版时,Visual Studio执行本地 rsync 命令,将文件从 Windows 文件系统复制到 WSL 文件系统。 本地 rsync 副本不需要任何用户干预。 当Visual Studio检测到你正在使用 WSL 2 发行版时,它会自动发生。 若要详细了解 WSL 1 与 WSL 2 之间的差异,请参阅比较 WSL 1 和 WSL 2

Visual Studio中的 CMake 预设集成支持 WSL 2 工具集。 若要了解详细信息,请参阅 Visual Studio 和 Visual Studio Code 中的 CMake 预设集成在 Visual Studio 中使用 CMake 预设进行配置和构建。 本文高级 WSL 2 和 CMake 项目注意事项下可以找到更详尽的信息。

安装生成工具

安装在 WSL 2 上进行生成和调试所需的工具。 在后续步骤中使用 Visual Studio 的 CMake 二进制部署安装最新版本的 CMake。

  1. 按照安装 WSL 中的说明来安装 WSL 和 WSL 2 发行版。

  2. 在Visual Studio安装程序中,验证是否已安装适用于 Linux 的 C++ CMake 工具。 为此,请选择 Visual Studio 版本的 Modify。 在 “单个组件 ”选项卡下,搜索 适用于 Linux 和 Mac 的 C++ CMake 工具 ,并确保它已选中并安装。 为了Visual Studio检测WSL安装,需要此组件。

  3. 假设你的发行版使用 apt(本演练使用 Ubuntu),此时请使用以下命令在 WSL 2 发行版上安装所需的生成工具:

    sudo apt update
    sudo apt install cmake g++ gdb make ninja-build rsync zip
    

    安装方法:

    • C++ 编译器
    • gdb
    • CMake
    • rsync
    • zip
    • 底层构建系统生成器

使用 WSL 2 发行版进行跨平台 CMake 开发

本演练使用 Ubuntu 上的 GCC 和 Ninja。 Visual Studio 2022 版本 17.0 预览版 2 或更高版本。

Visual Studio将 CMake 项目定义为项目根目录中具有 CMakeLists.txt 文件的文件夹。 在本演练中,你将使用 Visual Studio CMake Project 模板创建新的 CMake project:

  1. 从 Visual Studio Get started 屏幕中,选择创建一个新项目

    Visual Studio 2022 入门对话框的截图。 可用选项包括:克隆存储库、打开项目或解决方案、打开本地文件夹、创建新项目或不使用代码继续。

  2. 在“搜索模板”文本框中,键入“cmake”。 选择 CMake Project 类型,然后选择 Next。 提供项目名称和位置,然后选择“创建”

  3. 启用Visual Studio的 CMake 预设集成。 选择工具>选项>CMake>常规。 选择“首选使用 CMake 预设进行配置、构建和测试”,然后选择“确定”。 或者,可以将文件添加到 CMakePresets.json 项目的根目录。 有关详细信息,请参阅启用 CMake 预设集成

    Visual Studio 项目选项的截图。选择 CMake > General。

    在 CMake 配置文件组中,“使用 CMake 预设(如果可用),否则使用 CMakeSettings.json”被特别指出并已选择。

  4. 若要激活集成:在主菜单中,选择“文件”“关闭文件夹”>。 "“入门”页面会出现。" 在“打开最近使用的文件”下,选择刚关闭的文件夹来重新打开它

  5. Visual Studio主菜单栏有三个下拉列表。 使用左侧的下拉列表选择当前的活动目标系统。 将在此系统上调用 CMake 来配置和生成项目。 通过 wsl -l -v,Visual Studio 查询 WSL 安装。 在下图中,WSL2: Ubuntu-20.04 被选为目标系统。

    Visual Studio 的目标系统下拉列表的截图。WSL2:Ubuntu-20.04 是已选中的。

    注意

    如果Visual Studio开始自动配置项目,请阅读步骤 11 以管理 CMake 二进制部署,然后继续执行以下步骤。 若要自定义此行为,请参阅修改自动配置和缓存通知

  6. 使用中间的下拉列表可选择活动配置预设。 配置预设配置告知 Visual Studio 如何调用 CMake 并生成底层构建系统。 在步骤 7 中,活动配置预设是 Visual Studio 创建的 linux-default 预设。 若要创建自定义配置预设,请选择“管理配置...”;有关配置预设的详细信息,请参阅选择配置预设编辑预设

    Visual Studio 活动配置预设下拉列表的屏幕截图。选择了“管理配置...”选项。

  7. 使用右侧的下拉列表选择你的当前构建预设。 生成预设用于告知Visual Studio如何执行构建。 在步骤 7 的图中,活动生成预设是由 Visual Studio 创建的 Default 生成预设。 若要详细了解生成预设,请参阅选择生成预设

  8. 在 WSL 2 上配置项目。 如果项目生成未能自动启动,请使用 Project>Configureproject-name 手动调用配置。

    Visual Studio 项目配置下拉列表中的屏幕截图。已选择配置 CMakeProject。

  9. 如果 WSL 2 发行版上未安装受支持的 CMake 版本,Visual Studio提示在主菜单功能区下部署最新版本的 CMake。 选择以将 CMake 二进制文件部署到 WSL 2 发行版。

    Visual Studio工具栏下方提示的截图

    系统会提示用户是否从 C make 安装最新的 C Make 二进制文件。 org,因为未安装受支持的 C Make 版本。”

  10. 确认已完成配置步骤,并且你在“CMake”窗格下的“输出”窗口中看到“CMake 生成已完成”消息。 生成文件会写入 WSL 2 发行版的文件系统中的某个目录。

    Visual Studio 输出窗口的截图。它包含配置步骤期间生成的消息,包括 CMake 生成已完成。

  11. 选择活动调试目标。 调试下拉菜单列出了项目可使用的所有 CMake 目标。

    Visual Studio 调试下拉菜单的截图。已选择 CMakeProject。

  12. 解决方案资源管理器 中展开项目子文件夹。 在 CMakeProject.cpp 文件中,在 main() 中设置断点。 您也可以通过选择解决方案资源管理器中突出显示的“视图选取器”按钮来导航到 CMake 目标视图,如下面的屏幕截图所示。

    Visual Studio 解决方案资源管理器的截图,显示用于切换视图的按钮。它位于主页按钮的右侧。

  13. 选择调试>开始,或者按F5。 您的项目已构建,可执行文件在 WSL 2 发行版上启动,Visual Studio 在断点处停止执行。 Linux 控制台窗口会显示程序的输出(在本例中为 "Hello CMake."):

    正在运行的 hello world 程序的屏幕截图。

    Visual Studio Linux 控制台窗口显示程序的输出:“Hello C Make”。 编辑器窗口显示 hello world 程序。 执行已在代码行“return 0;”的断点处停止。

现已使用 WSL 2 和 Visual Studio 2022 生成和调试 C++ 应用。

进阶 WSL 2 和 CMake 项目注意事项

Visual Studio 仅为使用 CMakePresets.json 作为活动配置文件的 CMake 项目提供对 WSL 2 的本机支持。 若要从 CMakeSettings.json 迁移到 CMakePresets.json,请参阅 在 Visual Studio 中启用 CMake 预设集成

如果要面向 WSL 2 分发版且不想使用 WSL 2 工具集,请在 CMakePresets.json 的 Visual Studio 远程设置供应商映射中,将 forceWSL1Toolset设置为 true。 有关详细信息,请参阅Visual Studio 远程设置供应商映射图

如果 forceWSL1Tooslet 设置为 true,则Visual Studio不会维护 WSL 文件系统中的源文件的副本。 而是访问装载的Windows驱动器(/mnt/...)中的源文件。

在大多数情况下,最好将 WSL 2 工具集与 WSL 2 分发版配合使用,因为当项目文件存储在Windows文件系统中时,WSL 2 速度较慢。 若要详细了解 WSL 2 中的文件系统性能,请参阅比较 WSL 1 和 WSL 2

CMakePresets.json 的 Visual Studio 远程设置供应商映射中,指定高级设置,如 WSL 2 上项目被复制到的目录路径、复制源选项和 rsync 命令参数。 有关详细信息,请参阅Visual Studio远程设置供应商映射

系统标头仍会自动复制到 Windows 文件系统,以提供原生 IntelliSense 体验。 可以在 CMakePresets.json 的 Visual Studio 远程设置供应商映射中,自定义此副本中所包含或排除的标头。

可以在 CMakePresets.json 的Visual Studio设置供应商映射中更改 IntelliSense 模式或指定其他 IntelliSense 选项。 有关供应商映射的详细信息,请参阅 Visual Studio 远程设置供应商映射

基于 WSL 2 和 MSBuild 的 Linux 项目

建议对所有使用 Visual Studio 的 C++ 跨平台开发使用 CMake,因为它允许在 Windows、WSL 和远程系统上生成和调试同一项目。

但是,你可能有一个基于 MSBuild 的 Linux 项目。

如果你有基于 MSBuild 的 Linux 项目,则可以升级到 Visual Studio 中的 WSL 2 工具集。 请在解决方案资源管理器中右键单击项目,然后选择“属性”“常规”>“平台工具集”:>

Visual Studio 的下拉列表中选择了平台工具集,右侧的另一个下拉列表中选择了 WSL2 工具集的屏幕截图。

如果您要针对 WSL 2 分发版并且不想使用 WSL 2 工具集,请在 Platform Toolset 下拉列表中选择 用于 适用于 Linux 的 Windows 子系统 的 GCC 工具集用于 适用于 Linux 的 Windows 子系统 的 Clang 工具集。 如果选择上述任一工具集,Visual Studio不会在 WSL 文件系统中维护源文件的副本,而是通过装载的Windows驱动器(/mnt/...)访问源文件。 系统标头仍会自动复制到 Windows 文件系统,以提供本地 IntelliSense 体验。 在属性页>常规中,定制要在此副本中包含或不包含的标头。

在大多数情况下,最好将 WSL 2 工具集与 WSL 2 分发版配合使用,因为当项目文件存储在Windows文件系统中时 WSL 2 速度较慢。 要了解详细信息,请参阅比较 WSL 1 和 WSL 2

另请参阅

视频:使用 WSL 2 发行版和 Visual Studio 2022 调试 C++
Download Visual Studio 2022
在 Visual Studio
Tutorial:在远程Windows计算机上调试 CMake 项目