Visual studio中使用C++的Linux 开发

[原文发表地址] Linux development with C++ in Visual Studio
[原文作者] Marc Goodner
[原文发表时间] 2017/4/11

C++是一门通用语言,在许多领域和许多平台中被应用。Visual Studio 允许你作为一个C++开发者,去开发windows 桌面程序,应用商店程序,Linux,移动开发(Android 和 IOS),而且还有游戏平台,像DirectX,Unreal,Cocos。我们把这些称之为“工作负载”,而且这些应用也可以使用别的程序语言在Visual Studio中开发,比如Python 或者 C#。我们知道C++开发者会选择可以囊括所有这些应用开发平台的开发工具, 这就是Visual Studio 为什么要这么做的原因。在用户数量方面,Visual Studio在Windows平台上一直有着领先的IDE界面,为了C++开发者可以选择任何开发平台,而且这也是因为你们喜欢Visual Studio非常杰出且高质量的编辑环境,具有领先的调试和诊断工具,强大的测试工具,实用的团队协作工具,以及具有能够使用属于自己的编译器和生成系统的功能。

你可以点击上边的任何一个链接去学习Visual Studio中的相关功能。一个美好的开端就是我们可以从“开始使用Visual Studio”得到快速的引导。

在这篇博客中我们将深入研究使用C++的Linux程序开发。 你将会学到以下内容:

  • 如何在安装Visual Studio2017的时候选择这部分的功能
  • 如何创建一个Linux C++ 工程
  • 如何从Visual Studio中建立与一台Linux机器的第一次连接
  • 资源是如何在Visual Studio 和 Linux 之间管理的
  • Linux 工程系统提供怎么样的功能
  • 如何使用Visual Studio诊断工具去发现和解决问题。

安装C++ Linux 程序开发的工作负载

Visual Studio 2017 引入了C/C++ 的Linux 开发程序工作负载。为了安装这部分功能,启动Visual Studio 安装程序,选择安装或修复现有的安装。滚动到底部,在这部分的“其它工具集”你将会找到 使用C++ 的Linux 程序开发。这个会在十分钟之内安装完成。

创建工程

你需要一台Linux机器,当然,或者你也可以用Visual Studio使用Windows 分布式系统中的Linux。你可以使用任何Linux发布版本,像SSH,gdbserver,也可以安装一个编译器。在你的Linux环境中,这是非常容易的:

     sudo apt install -y build-essential gdbserver

在Visual Studio 中创建一个Linux控制台程序,选择工程类型新建项目> Visual C++ > 跨平台 > Linux.

这个工程将会打开一个“readme”,会包含一些关于这部分功能的说明。还有一个一个输出文本到控制台的main.cpp文件。继续编译它,使用菜单栏生成 > 生成解决方案。由于这是你的第一个Linux工程,你将会看到一个关于连接Linux机器的对话框。你可以使用密码或者私钥去添加一个新的连接。 Linux Connection Manager

在你输入这些信息之后,Visual Studio通过这个连接到你的Linux 系统,在这里所有的生成将会被执行。如果在这里有任何问题,生成的输出窗口将会指出你代码中的问题所在。

这个工程系统同步你的资源在Windows和Linux之间。如果你需要的话,同时还提供广泛的控制去管理资源。右键点击工程,并选择属性常规设置的页面允许你设置一些选项,比如在远程系统中使用哪一个文件夹,而且选择你想输出的配置类型(可执行文件,静态库或者动态库)。调试页面提供执行时额外的控制,例如,启动程序之前你可以运行额外的命令,如输出显示去调试应用程序。VC++目录页面提供可以智能控制额外的路径是否包含进来。复制源属性界面允许你指定是否复制资源到远程的Linux系统,如果你工作在一个共享上或者正在通过其他的方式管理你自己的资源同步,你可以不需要设置此页面。C/C++ 和链接组下的属性可以提供许多用于控制的编译选项。它们也可以覆盖默认的设置为了方便使用g++和选择我们自己需要的设置。最后,生成事件界面组下的属性可以提供在本地或远程运行额外的命令作为生成进程的一部分。

当然,你很有可能已经准备好了一些存在的源代码和一个生成系统。如果是这样的话,我们写的工程就是你想要的。你可以创建一个新工程,然后输入你的源代码,之后指定生成的命令为了能在远程Linux系统上使用。如果你的工程特别大,你可以找到它而且很容易自动生成工程而不是使用属性界面去手动配置所有的资源。你可以在这里找到些例子https://github.com/robotdad/vclinux。这些例子应该很容易修改成符合你自己需求的。

在C++ 的Linux程序开发中使用Visual Studio强大且高效的功能

智能感知界面提供了GCC和C++库集合的输出。这很容易配置你的工程去使用来自于你自己Linux系统中的头文件,可以感知你需要的一切。一旦你通过一段你自己的代码,你就可以看到Visual Studio高效的功能在起作用。

成员列表快速审阅,展示在下边的截图中,它们是两个强大智能感应功能的例子,使得编写代码变得容易和快速。成员列表显示一系列来自命名空间或者类型中的有效成员。在C++代码中输入“->”紧跟对象实例,将会显示一些列的成员,而且还可以通过TAB建插入和选择成员到你的代码中,或者输入空格,或者实心点。快速审阅在你的代码中显示任何标识符的完整定义。下边截图的例子中,Visual Studio 正在显示SimpleServer对象可以使用的成员列表和open() 方法的定义,这也使得编写代码变得简单许多。

代码重构,自动补全,提示错误的波浪线,引用高亮显示,代码语法颜色,和片段都是一些实用的高效率的功能,包括转到定义,转到行 \标识\成员\类型查找所有引用,查看调用层次结构,大纲显示,许多许多的功能,都可以提高你的效率。

速览定义功能,在以下截图显示,显示内联定义无需离开你当前的代码编辑界面。你可以找到速览定义功能选中你想查看的方法,之后右键点击或者按Alt+F12。下边的图中,检测的是OpenCV 中人脸检测的detectMultiScale方法,是在objdetect.hpp中,并且显示在当前CPP文件中的一个嵌入的窗口,这使得读写OpenCV代码更加的高效。

在这里,你可以在Visual Studio中学习太多太多关于编辑和浏览C++代码的知识。

调试和诊断问题

Visual Studio擅长帮助你解决开发中的问题,同样你也可以使用这些功能在用C++开发Linux 程序时。你可以在你的C++代码中打断点,然后按F5去启动调试,这将会在Linux 机器上运行你的代码。当到一个断点的时候,你可以在自动窗口监视窗口看见变量和复杂的表达式的值,也可以悬停鼠标在数据的上段,也可以看见调用堆栈在调用堆栈的窗口,很容易进出你的代码。你也可以使用条件在你的断点中去缩小一个特殊的问题。你也可以设置行为,比如在输出窗口记录变量的值。你还可以检查应用程序线程或查看反汇编。

如果你需要你的程序在Linux系统上进行交互,你可以使用来自Visual Studio 中的Linux控制台窗口。使用菜单中的调试->Linux控制台。下边的截图你就可以在24行看见输入提供给scanf()调用。

你甚至可以附加到进程在你的Linux机器上去调试问题。打开调试菜单并选择附加到进程。正如下边截图,选择的是SSH连接类型。你可以使用下拉式菜单去选择一台Linux机器。这将会列出你之前创建的远程连接。

请看我们的C++调试和诊断页面,了解更多关于我们常用的功能。

团队合作

开发程序通常是与人合作的。当它有代码存储, 共享, 云生成,Visual Studio团队服务器都有覆盖到这些。和其他团队成员合作很容易注册一个免费的Visual Studio服务器账户,提交你的源代码,还可以设置访问权限。现在,你们团队的每个人都可以拿到你的源代码了,可以编辑它,也可以迁回它。

Visual Studio团队服务器可以简化你的代码集成。创建和管理你的生成进程,可以在云端自动地编译和测试你的游戏。想知道bug是不是被修复在当前的版本中了吗?用代码关联工作项目,在当前版本的摘要中这个工作项目会列出代码的改变和测试的结果。 我们有很多团队开发C++程序的有用信息

从今天开始使用Visual Studio C/C++ 开发Linux程序

了解更深入关于如何使用Visual Studio C/C++ Linux程序开发,请看这篇博客docs.microsoft.com。请通过Visual Studio提交你的反馈,选择帮助->发送反馈。如果你有任何问题你也可以发邮件到vccplinux-support@microsoft.com.