vs2019+cmake实现Linux远程开发

在上一篇文章中我们介绍了使用vs2019作为远程Linux系统的开发环境,但我们是创建的传统的sln项目,而对于Linux开发者来说以autotools或是cmake进行项目结构的组织更为简单直观,也符合在Linux环境上的习惯。

autotools是较为古老的也是使用最为广泛的构建系统,你在Linux上总是避免不了类似./configure && make这样的命令,背后就是autotools为你完成了检测系统环境到生成makefile的一系列工作。

cmake是较新的一种工具,autotools虽然功能强大使用广泛,但是它的学习成本和维护成本也十分惊人,所以人们创造了cmake来简化工作。cmake十分简单易学,在表现力上丝毫不亚于autotools,同时还提供了丰富的官方模块和第三方模块以便于定制各种各样的功能。已经有许多项目开始使用cmake了,例如google test框架,qbittorrent,KDE,_MySQL_等,未来Qt也会从qmake迁移至cmake,目前已经提供了初步支持。

遗憾的是vs2019并不支持autotools工具链,但是vs2019支持cmake,而且相比vs2017,vs2019提供了远程开发的cmake支持,并且支持了更多的设置选项,所以我们今天将会介绍如何使用vs2019+cmake实现Linux远程开发。不过需要注意的是,本文是介绍如何搭建开发环境的,并不会介绍cmake的语法,并且我也假设各位读者已经基本了解了简单的CMkaeLists.txt该如何编写,如果不了解那么你可能需要先进行简单的cmake学习,这超出了本文的讨论范围你可以寻找其他的博客园文章学习相关知识。当然,即使理解不了后文所罗列的CMakeLists.txt的内容也没关系,我会尽量给出简单易懂的注释。

好了,现在该让我们进入主题了。

创建远程cmake项目

创建很简单,在vs的启动窗口中选择“创建新项目”,然后找到“CMkae项目”,选择后点击下一步即可,和创建传统项目的过程完全一样,如图:

vs2019+cmake实现Linux远程开发

创建完成后你的项目里会是如下的场景(假如项目名称叫CMakeProject1):

vs2019+cmake实现Linux远程开发

也许你会奇怪,为什么cmake项目不像sln项目那样区分出Linux和Windows平台呢?答案是我们可以通过对项目进行设置来切换本地环境和远程环境!

整个项目由CMakeLists.txt进行组织,而vs则负责在什么环境上运行cmake,这样就实现了同一套项目可以几乎不经过修改在不同平台上编译运行(只要你的目标平台装有cmake,且版本最低为3.8;本地环境vs自带了cmake)。

默认情况下的cmake project是在本地环境的,所以接下来我们创建一个叫“LinuxQt”的远程项目,接着设置对应的远程Linux环境。

设置远程环境

设置远程环境之前,你需要先在顶部的工具菜单的选项对话框中将远程连接设置好,并同步远程环境的头文件,具体过程可以参考这篇,过程一样就不赘述了。

在初始的项目中启动项要么是某个文件要么是空的,没有我们的远程环境,所以我们需要右键资源管理器中显示的CMakeLists.txt文件:

vs2019+cmake实现Linux远程开发

找到“project-name的CMake设置”,project-name是你的项目名称,点击。这时会生成一个“CMakeSettings.json”的文件,这是整个项目的配置文件,双击打开会显示图形化的配置界面:

vs2019+cmake实现Linux远程开发

首先我们看到了配置名称,这是给你的自定义配置起名字的地方,右边的绿色加号表示添加新的配置,因为我们只想使用Linux远程环境,所以我们直接修改了默认的配置项。

接下来是配置类型,这和cmake中的选项对应,在此处设置后就无需再写进CMakeLists.txt了,有Debug,Release等模式,我们选择Release,因为远程环境上的Qt我没有安装调试符合,选Debug除了增大编译目标的体积外也没什么用。

下面则是重点,远程计算机名称选项。点击下拉框即可出现我们在连接管理器中添加的远程环境,如果你没有添加远程环境,在右侧的按钮可以直接打开连接管理器进行添加。该选项默认是空的,也就是本机编译不启用远程环境。

接下来是工具集,也就是最终调用的编译器工具链,vs支持gcc和clang,linux_x64对应gcc,linux_clang_x64对应clang,此外还有arm平台的支持,选用什么工具链看对应平台和个人喜好,我这里选择了gcc。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxjyx.html