使用 VS 2017进行C++ for Linux远程开发

前言

最近的项目需要封装基础库,支持多平台。通常,当我们开发Linux程序时有两种方案:

  • 在Linux上直接编写程序并进行运行测试和调试
  • 在Windows或Mac OS X上借助工具进行远程开发

但是本人没做过Linux下的C++开发,算是从头开始学起。在网上查了资料后,发现VS2017以后已经可以在VS上进行Linux代码的开发,便自己尝试,且把过程记录下来,一起学习。
内容参考:使用 VS 2019进行C++ for Linux远程开发

准备工作

  1. 安装VS2017以上的版本,这里选择的VS2019版本,先去微软官方下载visual studio,下载地址如下:
    VS2019下载
    一般选择社区版就好。安装的时候需要勾选 c++ for Linux 功能。
  2. 准备一个可用的Linux远程环境,例如配置了静态IP的Linux虚拟机,并且已经安装好了GCC工具链以及openssh。
    我是用vmware workstation虚拟机安装Ubantu server版本。安装教程如下:(后续添加)。

使用

  1. 创建新项目,按提示直接创建就好,这里新建一个空项目。
    使用 VS 2017进行C++ for Linux远程开发_第1张图片
    使用 VS 2017进行C++ for Linux远程开发_第2张图片
  2. 配置项目属性
    vs不能编辑空项目的配置,所以我们先在项目中创建一个main.cpp,然后点击顶部菜单:项目->属性,你就能看到项目的配置界面了。
    使用 VS 2017进行C++ for Linux远程开发_第3张图片
    远程计算机是在调试中的远程连接管理器中添加的。这里一般不需要改动,除非你需要改变项目的类型或编译结果的存放位置。如果有多个远程环境时,也可以在这里进行选择。
    调试部分提供了gdb和gdbserver,前者是让vs在Linux上启动一个console,然后在其中运行gdb并返回输出,如果你的Linux上的终端配置了彩色输出,那么和遗憾vs并不认识他们,会显示成原始的字符串;使用gdbserver时会在远程启用gdbserver,本地vs解析回传的数据不会出现杂音。这里我们选择了gdbserver,如果你发现无法打断点,那么参考微软的建议,换回gdb方案:
    使用 VS 2017进行C++ for Linux远程开发_第4张图片
    接着是配置的重点,首先是配置需要同步的远程环境的头文件,有了这些文件vs才能对你的代码进行自动补全和提示:
    使用 VS 2017进行C++ for Linux远程开发_第5张图片
    默认复制的路径通常已经包含了Linux上大部分的头文件,通常我们也不需要做更改。头文件的同步发生在第一次构建项目成功后或添加远程连接后手动同步。
    接着是c/c++编译器的选择,也就是对gcc和g++编译参数的配置,讲解这些参数超出了我们的讨论范围,我们这里只需要选择合适的c++标准版本:
    使用 VS 2017进行C++ for Linux远程开发_第6张图片

链接远程环境

有了远程环境我们才能同步头文件或者进行调试运行。
在第一次编译或调试你的项目时vs会自动让你连接远程环境,当然,我们推荐在调试->选项->跨平台->连接管理器中进行设置:
使用 VS 2017进行C++ for Linux远程开发_第7张图片
使用 VS 2017进行C++ for Linux远程开发_第8张图片

开始调试

至此你已经可以在vs中编写面向Linux平台的代码了,自动补全可以正常工作:
在这里插入图片描述
可以看到Linux中的头文件和结构体都已经可以识别了。如果你发现无法自动补全(通常发生在刚添加远程连接或是项目设置发生了变化后),先试试关闭vs重新打开,如果没用请尝试刷新intellisense或重新同步头文件。在编辑结束后我们就能点击调试按钮运行我们的程序了:
在这里插入图片描述
注意,构建的体系架构必须是和远程环境一致的,比如远程环境是x64,这里可以选择x64或x86,但是不能选择arm,否则会报错。

#include 

int main()
{
	printf("hello from LinuxTest!\n");
	return 0;
}

点击调试->Linux 控制台,会显示一个可以交互的console,你可以在其中输入内容或是看到程序的输出:
使用 VS 2017进行C++ for Linux远程开发_第9张图片
可以看到远程的Linux系统对应的目录下也有相应的调试文件
使用 VS 2017进行C++ for Linux远程开发_第10张图片

遭遇问题

你可能感兴趣的:(C++跨平台)