AICon全球人工智能与机器学习技术大会9折特惠中,点击立减¥480! 了解详情
写点什么

Visual Studio 支持 CMake 语法高亮和智能代码补全

2014 年 10 月 14 日

Visual Studio 对新编程语言的支持是非常强大的,但很少有人有能力并下决心去利用这个平台。David Golub 却是其中之一,他为 Visual Studio 带来了对 CMake 的支持。

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

2014 年 10 月 14 日 21:584437
用户头像

发布了 77 篇内容, 共 31.6 次阅读, 收获喜欢 20 次。

关注

评论

发布
暂无评论
发现更多内容

毕业两年就拿到腾讯,字节offer,原来是看了这份BAT总结的面试核心知识点

Java架构师迁哥

Redisson 分布式锁源码 02:看门狗

程序员小航

Java redis 源码 分布式锁 redisson

Hive解析Json数组超全讲解

五分钟学大数据

hive 7月日更

数字科技这类人才是银行急需的

CECBC区块链专委会

足足13万字,腾讯架构师纯手肝“JDK源码笔记”带你从入门到实战!

Java架构师迁哥

凌晨起来肝的一篇 Java 学习路线,保证学弟学妹们大三大四的时候顺利找到实习 Offer

Java 白

微信业务架构图和“学生管理系统”毕业架构设计

NewBranSTONE

#架构实战营

完美收官!字节4面斩下2-2Offer,入职就是30K16薪,全凭这套“面试+架构进阶知识点”pdf

云流

Java 程序员 架构 面试

三面遭SpringCloudAlibaba暴锤,含恨吃透大佬的手抄本笔记(听说Github都没有),终入阿里

云流

Java 编程 架构 面试 微服务

Git点赞82K!阿里量产的保姆级Spring Security笔记,一眼望穿干货满满!

云流

Java 编程 架构 面试

北鲲云探索云计算在生命科学领域更多的应用场景

北鲲云

分布式认知工业互联网赋能工业企业数字化转型

CECBC区块链专委会

Go 学习笔记之 赋值

架构精进之路

go 7月日更

整整奋战6个月,入职字节跳动那一天,我泪目了

Java架构师迁哥

成功拿到饿了么offer后!我总结 5月上半月大厂面试真题,押题命中率高达 95%以上

云流

Java 程序员 架构 面试

不收藏你就后悔吧!费了三天才从GitHub上扒下的阿里Java优化笔记

Java架构师迁哥

MySQL开篇

卢卡多多

架构· MySQL 数据库 7月日更

王者荣耀异地多活架构设计

Lane

慕了没?3年经验,3轮技术面+1轮HR面,拿下字节30k*16薪offer

Java架构师迁哥

免费分享Java高并发与多线程的优秀图书

Java入门到架构

Java 推荐书籍

进阿里真的这么难?P8大佬告诉你,你和阿里之间缺的只是这份笔记

Crud的程序员

Java spring 编程 架构

web messaging与Woker分类:漫谈postMessage跨线程跨页面通信

zhoulujun

Service Worker

一站到底!Spring Cloud Alibaba第三版耀世升级全彩PDF版

Java架构师迁哥

刷完这两份pdf轻松拿下了蚂蚁金服、头条、小米等大厂的offer

程序员改bug

Java spring 架构 编程语言

IPFS矿机怎么挖矿IPFS矿机工作原理

IPFS老胡

公开吧!腾讯技术专家手撸“Redis技术笔记”,下载量已突破30W

云流

redis 编程 架构 面试

Token Pocket钱包DAPP系统开发

橙子区块链l53o56oloo3

区块链 dapp DAPP系统开发 token pocket

《持之以恒的从事运动》一

Changing Lin

总结近期BATJ大厂Java岗高频面试题,提问率高达98%

Crud的程序员

Java 编程 程序员 架构

【LeetCode】根据字符出现频率排序Java题解

HQ数字卡

算法 LeetCode 7月日更

ServiceWorker工作机制与生命周期:资源缓存与协作通信处理

zhoulujun

Service Worker

新晋管理者都会遇到的6个问题

新晋管理者都会遇到的6个问题

Visual Studio支持CMake语法高亮和智能代码补全-InfoQ