Visual Studio对新编程语言的支持是非常强大的,但很少有人有能力并下决心去利用这个平台。David Golub却是其中之一,他为Visual Studio带来了对CMake的支持。
Visual Studio对新编程语言的支持是非常强大的,但很少有人有能力并下决心去利用这个平台。David Golub却是其中之一,他为Visual Studio带来了对CMake的支持。
- CMake代码语法高亮
- 为CMake的命令和变量提供成员选择列表框
- 输入CMake命令的时候会提示参数
- CMake代码括号匹配
- 支持插入CMake代码片段(snippet)
- 在Visual Studio的编辑器中,当光标位于一个标准的CMake命令或变量之上的时候,按下F1就可以得到基于上下文的帮助内容
- 通过Visual Studio的Tools菜单就可以访问CMake的图形用户界面和文档
InfoQ:我们有些读者不熟悉CMake,你能告诉我们它是用来干什么的吗?
David Golub:CMake是一个跨平台的makefile生成工具,主要用于C和C++编程。在各种操作系统中,有很多工具可以用于编译C和C++代码,每种工具都有自己的makefile和项目文件格式。举个例子,Windows上的项目可能会使用Visual Studio的项目文件,而Linux项目则会使用GNU makefile。CMake提供了一种语言,开发者可以用它来定义项目的结构以及各种必要的配置步骤,它是跨平台的。CMake工具能处理这些代码,根据程序的目标平台,生成对应的makefile或项目文件。 在我刚刚开始为Visual Studio开发CMake工具的时候,我在Organic Motion工作,这家公司开发了3D动作捕获系统OpenStage以及其他一些产品。虽然OpenStage只能在Windows上运行,但是代码树是用CMake来创建的,这样既容易在将来需要的时候把代码移植到其他平台,也可以充分利用CMake的高级配置功能,这些功能在某些方面要比原生的Visual Studio项目文件更强大。
InfoQ:你为Visual Studio开发CMake插件花了多少工作量?
David:我为Visual Studio开发CMake工具前后大约花了一年时间,从2012年4月开始,到2013年5月发布第一个候选版本。我都是用晚上和周末的时间来完成这个项目的,鉴于我的工作职责所在,只有在这些时间我才有空。
InfoQ:开发过程中有哪些方面比你预想的要简单得多,或困难得多?
David:Visual Studio的SDK强大得不可置信,开发者可以利用它来为这个最佳IDE添加对任何编程语言的完整支持。但是,在有些情况下,SDK的文档还有点不足,要搞明白某些功能怎么用,必须要反复试验几次。举个例子,在实现括号匹配的时候,Visual Studio收到的范围对象(span object)里面并不包含字符在文件中的索引号,却包含了字符间空格的索引号。如果你尝试通过构建一个范围对象,指定相同起始和结束的索引号,来加亮单个字符,那结果就是什么都没加亮。弄明白Visual Studio SDK所有晦涩之处是最难搞的部分。
InfoQ:这个插件的哪部分工作最难实现?
David:为实现智能补全去解析代码,和编译器解析代码是不一样的。编译器的目的是接受句法正确的代码,输出可执行文件。如果被编译的代码有语法错误,编译器会产生对应的错误信息并终止执行。而另一方面,智能补全必须在程序员输入的时候就工作。在它被触发的任何时间点上,编辑器中的代码都不大可能是一个句法上完全正确的程序。并且,智能补全的解析必须要很快才行。开发者希望他们输入的瞬间就可以得到补全提示。为了解决这些挑战性问题,我编写了一组解析函数,这些函数能解析各种智能补全触发点需要的信息,却不需要构建抽象的语法树。
David Golub是MangoDB的工程师,在那里,他是MongoDB管理服务小组的成员,担任Windows专家的角色。在来到MangoDB之前,他在耶鲁大学和哥伦比亚大学学习了计算机科学,之后2012年到2013年之间在Organic Motion工作。他也同时管理着 Greater New York Roads网站。他很喜欢徒步,喜欢走荒郊野路去探索各种有趣的地点。
参考英文原文:Syntax Highlighting and IntelliSense support for CMake