强大的C++是在不牺牲性能的情况下,以多个平台为目标的能力。如果对多个目标使用相同的代码基,那么 克马克 是构建软件最常用的解决方案。在使用CGuSE时,可以使用VisualStudio来进行C++跨平台开发,而不需要创建或生成VisualStudio项目。只需在Visual Studio中打开包含源代码的文件夹(文件> 打开文件夹 ). visualstudio将识别正在使用CMake,然后使用CMake生成的元数据自动配置IntelliSense和生成。您可以快速地在Windows上本地编辑、生成和调试代码,然后在Linux上切换配置,所有这些都可以在visualstudio中完成。
在这些类型的代码库上工作的团队可能有具有不同主操作系统的开发人员,例如,有些人使用Linux(可能正在使用 Visual Studio代码 编辑器)和一些在Windows上(可能使用visualstudioide)。在这样的环境中,工具的选择可能取决于开发人员自己。您可以在这样的环境中使用visualstudio,而无需干扰其他团队成员或按原样更改源代码。如果或当需要额外配置时 保存在平面json文件中 可以在本地保存,或者在源代码管理中与使用visualstudio的其他开发人员共享,而不会影响不使用它的开发人员。
VisualStudio不再只是Windows C和C++开发的工具。如果您在自己的计算机上遵循下面的教程,您将从GitHub克隆一个开源项目,在visualstudio中打开它,在Windows上编辑、生成和调试,而不更改项目。然后visualstudio将添加到Linux机器的连接,并在远程机器上编辑、构建和调试它。
下一节将向您展示如何设置VisualStudio,接下来是一节介绍如何配置Linux目标,最后是教程本身—玩得开心!
为跨平台C++开发建立VisualStudio
首先,您需要安装visualstudio。如果已经安装,请确认 用C++开发桌面 和 用C++开发Linux 已安装工作负载。如果没有安装Visual Studio 使用此链接 要安装它,请选择本教程的最小组件集。这个最小的安装只有3GB,取决于你的下载速度,安装不应该超过10分钟。
一旦完成,你就可以在Windows上运行了。
为跨平台C++开发配置Linux机器
visualstudio对Linux的特定发行版没有要求;你想用什么都行。它可以在物理机器上、虚拟机上、云上,甚至在Windows子系统上运行。VisualStudio需要在Linux机器上呈现的工具是:C++编译器、GDB、SSH和ZIP。在基于Debian的系统上,可以按如下方式安装这些依赖项。
sudo apt install -y openssh-server build-essential gdb zip
visualstudio当然也需要CMake。但是,它需要启用服务器模式的最新版本的CMake(至少3.8版)。我们的团队制作了一个通用的CMake版本,可以安装在任何Linux发行版上。我们建议您在包管理器中使用这个构建,因为它是从我们的CMake源代码分支构建的。使用这个fork可以确保您拥有最新的特性,以防它们没有备份。我们记录 如何在此处配置CMake ,你可以 从这里获取CMake二进制文件 . 转到该页面并下载与Linux机器上的系统架构相匹配的版本。将其标记为可执行文件:
wget chmod +x cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh chmod +x cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh
您可以使用–help查看运行它的选项。我们建议您使用–prefix选项指定在/usr/local路径中安装,因为这是visualstudio查找CMake的默认位置。
sudo ./cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh --skip-license --prefix=/usr/local
教程:在visualstudio中使用Bullet Physics SDK GitHub repo
现在,您已经拥有VisualStudio和Linux机器了,让我们在VisualStudio中找到一个真正的开源C++项目,目标是Windows和Linux。在本教程中,我们将使用 GitHub上的子弹物理SDK . 这是一个库,为各种不同的应用程序提供碰撞检测和物理模拟。其中有一些示例可执行程序可供使用,因此我们无需编写额外的代码就可以与之交互。您不必在接下来的步骤中修改任何源代码或构建脚本。
请注意,您可以在本教程中使用任何Linux发行版,但是在本教程中使用Windows Subsystem for Linux并不是一个好主意,因为我们将要运行的可执行文件是图形化的,官方不支持它。
步骤1–克隆并打开bullet3 repo
首先,从安装了VisualStudio的计算机上的GitHub克隆bullet3存储库。如果您在命令行上安装了git,那么只要在您希望保留此存储库的任何位置运行git clone就可以了。
git clone https://github.com/bulletphysics/bullet3.git
现在打开根项目文件夹bullet3,它是通过在visualstudio中克隆repo创建的。使用菜单选项File>Open>Folder,它将检测并使用CMakeLists.txt文件,也可以使用File>Open>CMake直接选择所需的CMakeLists.txt文件。
您还可以直接在visualstudio中克隆git repo,完成后它将自动打开该文件夹。
打开文件夹后,您的文件夹结构将在解决方案资源管理器中显示。
此视图准确显示磁盘上的内容,而不是逻辑视图或筛选视图。默认情况下,它不显示隐藏的文件。要查看它们,请选择解决方案资源管理器中的“显示所有文件”按钮。
步骤2–使用目标视图
打开使用CMake的文件夹时,visualstudio将自动生成CMake缓存。这将需要一些时间,或更长的时间取决于您的项目的大小。此进程的状态将显示在“输出”窗口中。当您看到消息“Target info extraction done”(目标信息提取完成)时,此操作完成。
完成后,配置IntelliSense,可以生成项目,您可以启动应用程序并对其进行调试。visualstudio现在还可以理解CMake项目生成的构建目标。这将启用另一个CMake Targets视图,该视图提供解决方案的逻辑视图。使用解决方案资源管理器中的“解决方案和文件夹”按钮切换到此视图。
下面是Bullet SDK的视图。
这使我们能够更直观地了解这个源代码库中的内容。您可以看到一些目标是库,而另一些是可执行文件。您可以展开这些节点并查看组成它们的源,而不必考虑它在磁盘上的表示方式。
步骤3–设置断点、构建和运行
在本教程中,使用可执行文件获取可以运行并进入调试器的内容。选择AppBasicExampleGui并展开它。打开文件BasicExample.cpp。这是一个演示子弹物理库的示例程序,它通过渲染一堆立方体,这些立方体排列成一个块,在撞击表面时掉落并碎裂。 接下来,设置一个断点,当您在运行的应用程序中单击时将触发该断点。在该应用程序使用的助手类中的方法中处理的。要快速到达那里,请选择CommonRigidBodyBase,StructBasicExample是从第30行派生的。右键单击并选择GotoDefinition。现在您进入了CommonRigidBodyBase.h的标题。在源代码上方的浏览器视图中,您应该看到您位于CommonRigidBodyBase中。在右边,您可以选择要检查的成员,将所选内容下拉,然后选择MouseButtonCallback,这将带您到标题中该函数的定义。
在函数的第一行放置断点。在VisualStudio调试器下启动应用程序时,当您在应用程序窗口中单击鼠标按钮时,将触发此事件。
要启动应用程序,请选择启动下拉列表,并在工具栏中显示“选择启动项”的播放图标。
在下拉列表中选择AppBasicExampleGui.exe。现在按下启动按钮。这将导致项目生成我们的应用程序和必要的依赖项,然后在附加visualstudio调试器的情况下启动它。当这个过程开始时,需要一些时间,然后应用程序就会出现。
将鼠标移到应用程序窗口中,单击一个按钮,就会触发断点。这将暂停程序的执行,将visualstudio带回前台,您将处于断点处。您将能够使用visualstudio以交互方式检查应用程序变量、对象、线程、内存和单步执行代码。可以单击“继续”让应用程序恢复并正常退出,也可以使用“停止”按钮在VisualStudio中停止执行。
到目前为止,您所看到的只是简单地从GITHUB中克隆C++ RePO,您可以使用VisualStudio打开文件夹,并获得一个提供智能感知的体验,一个文件视图、基于构建目标的逻辑视图、源导航、构建和调试,而没有特殊配置或VisualStudio特定的项目文件。如果您要对源代码进行更改,那么您将从上游项目获得一个diff视图,进行提交,并在不离开visualstudio的情况下将它们推回。但还有更多。让我们将这个项目与Linux结合使用。
步骤4–添加Linux配置
到目前为止,您一直在为我们的CMake项目使用默认的x64调试配置。配置是visualstudio理解它将用于CMake的平台目标的方式。磁盘上不表示默认配置。显式添加配置时,将创建一个文件CMakeSettings.json,其中包含Visual Studio用于控制CMake如何运行以及何时在远程目标(如Linux)上运行的参数。要添加新配置,请选择工具栏中的“配置”下拉列表,然后选择“管理配置…”
将出现“将配置添加到CMakeSettings”对话框。
在这里,您可以看到visualstudio为许多平台提供了预配置的选项visualstudio可以配置为与CMake一起使用。如果要继续使用默认的x64调试配置,则应首先添加该配置。在本教程中,您需要这样做,以便可以在Windows和Linux配置之间来回切换。选择x64 Debug并单击Select。这将创建带有“x64 Debug”配置的CMakeSettings.json文件,并将VisualStudio切换为使用该配置而不是默认配置。这会很快发生,因为提供的设置与默认设置相同。您将看到配置下拉列表不再将“(default)”作为名称的一部分。
通过更改CMakeSettings.json中的name参数,可以为配置使用任何名称。
现在,您已经在配置下拉列表管理配置选项中指定了配置,将打开CMakeSettings.json文件,以便您可以在那里调整值。要添加Linux配置,请右键单击解决方案资源管理器视图中的CMakeSettings.json文件,然后选择添加配置。
这与您以前看到的将配置添加到CMakeSettings对话框相同。这次选择Linux Debug,然后保存CMakeSettings.json文件。现在在配置下拉列表中选择Linux Debug。
由于这是您第一次连接到Linux系统,因此将出现“连接到远程系统”对话框。
提供到您的Linux机器的连接信息,然后单击Connect。这将添加该机器作为默认的远程机器,这是cmakesettings.json for Linux Debug配置使用的机器。它还将从远程机器上下拉标头,以便在使用该机器时获得特定于该机器的IntelliSense。现在visualstudio将文件发送到远程机器,然后在那里生成CMake缓存,完成后visualstudio将被配置为使用与远程Linux机器相同的源代码库。这些步骤可能需要一些时间,具体取决于网络的速度和远程机器的电源。当CMake输出窗口中出现消息“Target info extraction done”时,您将知道这已完成。
第5步-在Linux上设置断点、构建和运行
由于这是一个桌面应用程序,您需要向调试配置提供一些额外的配置信息。在“CMake目标”视图中,右键单击AppBasicExampleGui并选择 调试和启动 设置。
这将打开隐藏的.vs子文件夹中的launch.vs.json文件。此文件是开发环境的本地文件。如果您希望签入它并将它保存到您的团队中,您可以将它移到项目的根目录中。在这个文件中,已经为AppBasicExampleGui添加了一个配置。这些默认设置在大多数情况下都有效,因为这是一个桌面应用程序,您需要提供一些附加信息,以便以您可以在Linux机器上看到的方式启动程序。您需要知道Linux机器上的环境变量DISPLAY的值,运行这个命令来获取它。
echo $DISPLAY
在我的例子中,这是:1.在AppBasicExampleGui的配置中,有一个参数数组“pipeArgs”。其中有一行“${debuggerCommand}”。这是在远程机器上启动gdb的命令。VisualStudio需要在该命令运行之前将显示导出到此上下文中。通过使用display的值修改该行,如下所示。
"export DISPLAY=:1;${debuggerCommand}",
现在,为了启动和调试我们的应用程序,选择工具栏中的“选择启动项”下拉列表,然后选择AppBasicExampleGui。
现在按那个按钮或者按F5。这将在远程Linux机器上构建应用程序及其依赖项,然后在附加visualstudio调试器的情况下启动它。在您的远程Linux机器上,您应该会看到一个应用程序窗口出现,其中有相同的一堆立方体排列成一个块。
将鼠标移到应用程序窗口中,单击一个按钮,就会触发断点。这将暂停程序的执行,将visualstudio带回前台,您将处于断点处。您还应该在visualstudio中看到一个Linux控制台窗口。这个窗口提供来自远程Linux机器的输出,它还可以接受stdin的输入。当然,它可以停靠在你喜欢看到它的位置,它的位置将在未来的会议中再次使用。
您将能够使用visualstudio以交互方式检查应用程序变量、对象、线程、内存和单步执行代码。这次是在远程Linux机器上,而不是在本地Windows环境上。可以单击“继续”让应用程序恢复并正常退出,也可以使用“停止”按钮在VisualStudio中停止执行。如果这是在本地运行的话,所有的事情都是一样的。
查看“调用堆栈”窗口,您将看到这次对x11OpenGLWindow的调用,因为VisualStudio已经在Linux上启动了该应用程序。
你学到了什么,在哪里可以学到更多
所以现在您已经看到了相同的代码库,直接从GitHub克隆,构建、运行,并在Windows上调试,没有任何修改。然后通过一些小的配置设置,在远程Linux机器上构建、运行和调试。如果你在做跨平台开发,我们希望你能在这里找到很多爱。VisualStudio C和C++开发不再仅仅是用于Windows。
其他条款
- 原始Linux C++公告发布 这将深入到使用MSBug来驱动远程编译的Linux C++项目中。
文档链接
- CMake项目
- 打开文件夹项目 对于任何构建系统的C++
- 下载并设置Linux工作负载 VisualStudioC++ Linux文档的根页面
本节将在将来更新,并提供有关VisualStudio跨平台开发的新文章的链接。
给我们反馈
使用此链接下载Visual Studio 2017 您可以尝试本教程中的步骤,然后在您的项目中尝试。
你的反馈对我们很重要。我们期待您的来信,期待您的光临。
一如既往,我们欢迎您的反馈。我们可以通过下面的评论或电子邮件联系我们( visualcpp@microsoft.com ). 如果您遇到MSVC的其他问题或对VisualStudio有建议,请让我们知道 帮助>发送反馈>报告问题/在产品中提供建议 ,或 通过 开发者社区 . 你也可以在Twitter上找到我们( @视觉 ).