是这么回事儿。上周,VS开发团队Erika小姐姐在Visual Studio官方博客上透露了这样一件事:MySQL Server团队在其博客上分享了如何使用VS对他们的灭霸级工程MySQL进行编辑,构建以及调试的方法。
MySQL开发团队的Georgi也在博客中盛赞VS:”我最近发现,每天在我的笔记本上使用VS,似乎成了我每天都要做的事情。确实,我使用这套玩意有一段时间了,VS开发团队一直对他们的东西进行优化和演进,我非常喜欢这样的感觉。VS有着十分快速的演进速度,他们的开发团队也十分具有响应性(responsive)。另外,那些像我一样的个人开发者在使用VS的过程中,也逐渐感觉到什么是”受控”(in control)的感觉,我们对VS的忠诚度也在逐渐提升。”
Erika小姐姐自然是十分高兴,她给予了非常积极的回应:”感谢Georgi的反馈和华丽的赞美之词,我们将继续基于用户的使用反馈对我们的产品进行优化和改进”。
VS和MySQL,可以说是业界的两个”大家伙”,在我们的认知里,提起VS,就会想到它是作为Windows平台上的首选开发IDE。另一个大家伙MySQL,作为一款开源数据库,其广泛应用在基于Linux平台的数据库系统上。MySQL开发团队使用VS进行工程的构建和调试,说明了一件事:使用VS来进行日常开发工作,在某种程度上,确实能提高生产力。(想想gdb+vi那套我就蛋疼)
MySQL开发团队其中的一个重要目标是,能让我们的代码尽可能的在各种现代的C/C++编译器和操作系统上编译和运行。这可以让独立开发者使用他们最喜爱的操作系统和编译器来进行工作。
我们试过VS Code,相比于VS,我们发现它还许多地方没有满足我们的需求。
但是,作为MySQL开发团队的一员,随着每次MySQL的发布,其代码量与日俱增。在远古时期,完整编译MySQL .只需要不到分钟,而现在,使用我那台i + SSD笔记本,编译最新版本至少得一个小时起,而且,我每天得在不同的分支上编译整个代码树次,那确实是太耗时间了,我不得不去寻找一些减少构建时间的方法。
当然啦,我可以换一台性能更为强劲的台式机来编译,但是那样的话,我得花时间维护这台机器并且还得在两台不同的机器上工作,还是算了吧。
茫茫人海中,我找到了Visual Studio。它带来了一种全新的方法,有效的减少了我的构建时间。
在Windows上使用VS可以看做是一种前端(front-end),然后将一些累活(编译,链接,运行)交由一台远程Linux机器执行。我可以访问这台性能强劲的Linux机器并在那台机器上进行编译和测试。老天,我确实是不愿意在使用gdb+vi那套玩意儿了。当我发现在最新的VS中可以在一台远程机器上编译和调试时,我真是非常兴奋有么有。通过这种方法,我可以在本机的VS上写代码,然后在另一台专业构建机器上干那些脏活,累活。美滋滋?
首先安装VS并更新到最新版本:v. Preview 。
在安装VS时,选择以下两个组件:
添加远程机器的登录凭证,这通常是一个SSH登录主机和密码:
Checkout MySQL代码树,这里我使用了git命令行:
打开VS并选择”打开一个本地文件夹”,然后选择MySQL源代码目录。
VS会检查这个源代码目录,并确定这个目录是否是一个CMake代码工程。在VS的左下角会显示后台工作进度,检查完毕后,在VS菜单中会出现”构建”的菜单,此时VS会尝试对这个源代码目录进行本机编译(因为这是默认行为)。请注意了,MySQL依赖一些第三方的库,如果此时进行编译会出现编译失败的情况,因为这个时候,这些第三方库还没有安装好。我还真试了试,我得到了下面的错误:
现在可以添加远程机器的配置了。点击配置下拉框的”Manage Configurations”,然后VS会自动打开CMakeSettings.json文件。
点击绿色的加号,然后添加第二个配置,命名为Linux-debug,用来构建Linux平台版本。
在第二个配置中,可以点击”Edit JSON”来进行自由修改。以下内容需要修改:
> 远程机器上的输出路径。
> 在本机和远程机器上指定boost和openSSL库的头文件目录。
> 我的远程机器上有多个CPU核,所以我添加了一个-j的编译选项,这样可以使用个线程进行并行编译。
配置文件修改完成后,就可以在VS的配置下拉框中看到Linux-debug配置。
接下来,VS会自动同步所有的MySQL代码到远程机器。同步需要的时间,取决于网络连接速度,另外,如果远程技术上没有最新版本的cmake,则VS会提示是否添加一个。
接下来,同步完成之后,会在远程机器上执行一次cmake。这个过程可能需要一点时间。
VS会更新代码树,如下:
点击Ctrl+Shift+B,开始构建。此时,远程机器开始编译MySQL,同时可以在VS中看到编译进度。等待编译完成可能需要点时间,这取决于远程机器的性能。
接下来我试着在源代码中故意引入一个错误,这个时候,VS的IntelliSense马上发现了这个错误并显示在错误列表中。
令我感到惊喜的是,远程编译中的错误也会显示在错误列表中,这就好像是在进行本机编译一样。
同时,在VS中也可以对MySQL进行远程调试,基本有如下几个步骤:
> 配置远程调试
> 初始化远程调试器
> 进行远程调试
为了能让开发者,特别是Linux平台开发者更加享受开发的过程,VS开发团队做了很多努力,我相信今天本文中的特性,随着时间的演进,会变得越来越好用。
我预感画风会变成这样:One IDE, for every target environment。坐等打脸。