问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

教程:在 Visual Studio 中创建 C++ 跨平台项目

创作时间:
作者:
@小白创作中心

教程:在 Visual Studio 中创建 C++ 跨平台项目

引用
1
来源
1.
https://learn.microsoft.com/zh-cn/cpp/build/get-started-linux-cmake?view=msvc-170

本文将介绍如何在Visual Studio中创建C++跨平台项目,详细讲解了在Windows和Linux上使用Visual Studio C++进行跨平台开发的步骤。通过本教程,你将学会如何从GitHub克隆开源CMake项目、在Visual Studio中打开项目、在Windows和Linux上生成和调试可执行目标等实用技能。

Visual Studio C++开发不再仅适用于Windows。本教程介绍如何在Windows和Linux上使用Visual Studio C++进行跨平台开发。由于它基于CMake,无需创建或生成Visual Studio项目。打开包含CMakeLists.txt文件的文件夹时,Visual Studio会自动配置IntelliSense并生成设置。可以快速开始在Windows上本地编辑、生成和调试代码。然后,切换配置,在Linux上执行相同的操作,所有这些操作都从Visual Studio中进行。

本教程将介绍以下内容:

  • 从GitHub克隆一个开源CMake项目
  • 在Visual Studio中打开项目
  • 在Windows上生成和调试可执行目标
  • 添加与Linux计算机的连接
  • 在Linux上生成和调试相同的目标

先决条件

设置适用于跨平台C++开发的Visual Studio

首先,安装Visual Studio,然后选择“使用C++的桌面开发”和“使用C++的Linux开发”工作负载。此最小安装仅为3GB。根据下载速度,安装不应超过10分钟。

设置适用于跨平台C++开发的Linux计算机

Visual Studio不需要任何特定的Linux发行版。OS可在物理计算机上、VM或云中运行。也可以使用适用于Linux的Windows子系统(WSL)。但是,在本教程中,需要一个图形环境。不建议在此处使用WSL,因为它主要用于命令行操作。

Visual Studio在Linux计算机上需要这些工具:C++编译器、gdb、ssh、rsync、make和zip。在基于Debian的系统上,可以使用此命令安装这些依赖项:

sudo apt install -y openssh-server build-essential gdb rsync make zip

Visual Studio需要有已启用服务器模式(至少为3.8)的Linux计算机上的最新CMake版本。Microsoft生成可以在任何Linux发行版上安装的通用CMake版本。建议使用此版本以确保拥有最新功能。可从GitHub上的CMake存储库Microsoft分支获得CMake二进制文件。转到该页面并下载与Linux计算机上的系统架构匹配的版本,然后将其标记为可执行文件:

wget <path to binary>
chmod +x cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh

可以使用--help查看运行脚本的选项。建议使用--prefix选项以在/usr路径中指定安装,因为/usr/bin是Visual Studio查找CMake的默认位置。以下示例显示了Linux-x86_64脚本。如果使用其他目标平台,请根据需要进行更改:

sudo ./cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh --skip-license --prefix=/usr

在Windows计算机上安装的适用于Windows的Git。
一个GitHub帐户。

从GitHub克隆一个开源CMake项目

本教程使用GitHub上的Bullet Physics SDK。它为许多应用程序提供了冲突检测和物理模拟。该SDK包括示例可执行程序,这些程序无需编写其他代码即可编译和运行。本教程未修改任何源代码或生成脚本。首先,请在安装了Visual Studio的计算机上从GitHub克隆bullet3存储库:

git clone https://github.com/bulletphysics/bullet3.git
  1. 在Visual Studio主菜单上,选择“文件”>“打开”>“CMake”。导航到下载的bullet3存储库根目录中的CMakeLists.txt文件。
    打开文件夹后,文件夹结构将显示在“解决方案资源管理器”中。
    此视图可以准确显示磁盘上的内容,而不是逻辑或筛选视图。默认情况下,该视图不显示隐藏文件。
  2. 选择“显示所有文件”按钮以查看文件夹中的所有文件。

切换到目标视图

打开使用CMake的文件夹时,Visual Studio会自动生成CMake缓存。此操作可能需要一些时间,具体取决于项目的大小。
2. 在“输出窗口”中,选择“显示输出源”,然后选择“CMake”以监控缓存生成过程的状态。操作完成后,会显示“目标信息提取已完成”。
完成此操作后,配置IntelliSense。可以生成项目,并调试应用程序。Visual Studio现在可以根据CMakeLists文件中指定的目标显示解决方案的逻辑视图。
4. 使用“解决方案资源管理器”中的“解决方案和文件夹”按钮切换到CMake目标视图。
下面是Bullet SDK的视图:
目标视图提供了此源基础内容更直观的视图。你可以看到一些目标是库,其他目标是可执行文件。
6. 在CMake目标视图中展开节点以查看其源代码文件,无论这些文件位于磁盘上的哪个位置。

添加显式的Windows x64-Debug配置

Visual Studio为Windows创建默认x64-Debug配置。Visual Studio可借助配置了解将在CMake中使用的平台目标。磁盘上未显示默认配置。显式添加配置时,Visual Studio会创建名为CMakeSettings.json的文件。其中填充了所指定的所有配置的设置。
2. 添加新的配置。打开工具栏中的“配置”下拉列表,然后选择“管理配置”。
随即会打开CMake设置编辑器。选择编辑器左侧的绿色加号,添加新配置。随即出现“将配置添加到CMakeSettings”对话框:
此对话框显示Visual Studio附带的所有配置,以及你创建的任何自定义配置。如果要继续使用“x64-Debug”配置,首先就应添加该配置。选择x64-Debug,然后选择“选择”按钮。Visual Studio将创建CMakeSettings.json文件(其中包含x64-Debug的配置),并将其保存到磁盘。可通过直接在CMakeSettings.json中更改名称参数来使用你喜欢的任何名称。

在Windows上设置断点、生成和运行

在此步骤中,我们将调试一个演示Bullet Physics库的示例程序。
2. 在“解决方案资源管理器”中,选择AppBasicExampleGui并展开它。
4. 打开BasicExample.cpp文件。
6. 设置在单击正在运行的应用程序时触发的断点。单击事件在helper类中的方法中进行处理。快速转至此处:
2. 选择结构BasicExample派生自的CommonRigidBodyBase。此函数大约在第30行。
4. 右键单击并选择“转到定义”。现在你位于标头CommonRigidBodyBase.h。
6. 在源上方的浏览器视图中,应看到自己位于CommonRigidBodyBase。转到右侧,可以选择要检查的成员。打开下拉列表并选择mouseButtonCallback,转到标头中该函数的定义。
8. 在此函数的第一行设置一个断点。在Visual Studio调试器下运行时,在应用程序窗口中单击鼠标按钮时会触发此断点。
10. 若要启动应用程序,请在工具栏中选择“启动”下拉列表。它带有绿色播放图标,其中显示“选择启动项”。在下拉列表中选择AppBasicExampleGui.exe。可执行文件名现在显示在启动按钮上:
12. 选择“启动”按钮生成应用程序和必要的依赖项,然后使用附加的Visual Studio调试器启动它。几分钟后将显示正在运行的应用程序:

  1. 将鼠标移动到应用程序窗口,然后单击按钮以触发断点。此断点会将Visual Studio带回到前台,并且编辑器显示执行暂停的行。可以以交互方式检查应用程序变量、对象、线程和内存或步骤。选择“继续”使应用程序继续运行,然后将其正常退出。或者,通过使用“停止”按钮,在Visual Studio中停止执行。

添加Linux配置并连接到远程计算机

  1. 添加Linux配置。右键单击“解决方案资源管理器”视图中的CMakeSettings.json文件,然后选择“添加配置”。此时将出现与之前相同的“将配置添加到CMakeSettings”对话框。这一次选择“Linux-Debug”,然后保存CMakeSettings.json文件(Ctrl + S)。
  2. Visual Studio 2019版本16.6或更高版本:向下滚动到“CMake设置编辑器”的底部,并选择“显示高级设置”。选择“Unix生成文件”作为“CMake生成器”,并保存CMakeSettings.json文件(ctrl + s)。
  3. 在配置下拉列表中选择“Linux-Debug”。
    如果这是首次连接到Linux系统,则会出现“连接到远程系统”对话框。
    该对话框包含主机名、端口、用户名、身份验证类型和密码的字段。除端口设置为22,身份验证类型设置为“密码”外,所有字段均为空。
    如果已添加远程连接,则可以通过导航到“工具”>“选项”>“跨平台”>“连接管理器”来打开此窗口。
  4. 提供Linux计算机的连接信息,然后选择“连接”。Visual Studio会将该计算机添加为CMakeSettings.json,作为“Linux-Debug”的默认连接。它还会从远程计算机中下拉标头,以便获得特定于该远程连接的IntelliSense。接下来,Visual Studio会将文件发送到远程计算机,并在远程系统中生成CMake缓存。这些步骤可能需要一些时间,具体取决于网络速度和远程计算机的功率。操作完成后,CMake输出窗口中会显示“目标信息提取已完成”消息。

在Linux上设置断点、生成和运行

由于这是桌面应用程序,你需要向调试配置提供一些其他配置信息。
2. 在“CMake目标”视图中,右键单击“AppBasicExampleGui”并选择“调试并启动设置”,打开隐藏的“.vs”子文件夹中的launch.vs.json文件。此文件是开发环境的本地文件。如果希望签入该文件并将其保存到团队中,则可以将该文件移动到项目的根目录中。在此文件中,已为AppBasicExampleGui添加了一个配置。这些默认设置在大多情况下都适用,但在此处不适用。由于它是一个桌面应用程序,你需要提供一些附加信息来启动程序,以便可以在Linux计算机上查看它。
4. 若要查找Linux计算机上的环境变量DISPLAY的值,请运行以下命令:

echo $DISPLAY

在AppBasicExampleGui的配置中,有一个“pipeArgs”参数数组。它包含一行:“${debuggerCommand}”。这是在远程计算机上启动gdb的命令。Visual Studio必须在该命令运行之前将显示内容导出到此上下文中。例如,如果显示值为:1,请按如下所示修改该行:

"export DISPLAY=:1;${debuggerCommand}",
  1. 启动并调试应用程序。打开工具栏中的“选择启动项”下拉列表,然后选择AppBasicExampleGui。接下来,选择工具栏中的绿色播放图标,或按F5。这将在远程Linux计算机上生成应用程序及其依赖项,然后使用附加的Visual Studio调试器启动。在远程Linux计算机上,你应看到一个应用程序窗口。
  2. 将鼠标移动到应用程序窗口,然后单击按钮。命中断点。程序执行暂停,Visual Studio回到前台,你将看到该断点。你还应看到Visual Studio中出现了一个Linux控制台窗口。此窗口提供远程Linux计算机的输出,并且还可接受stdin的输入。与任何Visual Studio窗口一样,你可以将其停靠在你喜欢的位置。在未来的会话中保留其位置。
    窗口中的输出表明,使用dlopen/dlsym动态加载的C11函数正常,已创建GL 3.0上下文,并且已获得Direct GLX渲染上下文并使其成为当前上下文。该窗口包含GL_VENDOR、GL_version、GL_SHADING_LANGUAGE_version等的各种版本信息。
  3. 可以使用Visual Studio以交互方式检查应用程序变量、对象、线程、内存和步骤。但这一次是在远程Linux计算机而不是本地Windows环境中完成所有这些工作。可以选择“继续”,让应用程序恢复并正常退出,也可以选择“停止”按钮,就像在本地执行一样。
  4. 查看“调用堆栈”窗口,并查看自Visual Studio在Linux上启动应用程序后对x11OpenGLWindow的调用。
    callstack显示CommonRigidBodyBase::mouseMoveCallback上的断点,以及其前面的调用,例如OnMouseMove、X11OpenGLWindow::pumpMessage等。

已了解的内容

在本教程中,你直接从GitHub克隆了一个基本代码。你在Windows上生成、运行并调试了该代码,但未进行修改。然后,使用相同基本代码在远程Linux计算机上进行了生成、运行并调试,并进行了少量配置更改。

后续步骤

了解有关在Visual Studio中配置和调试CMake项目的更多信息:

本文原文来自微软官方文档

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号