Cracking C++(11): CMake代码高亮调研

news2025/3/14 20:14:26

文章目录

    • 1. 目的
    • 2. VSCode 插件
      • CMake 和 CMake Tools
      • CMake Language Support
      • CMake Highlights
    • 3. JetBrains 系列
      • 3.1 CLion
      • 3.2 Fleet
    • 4. Kate
    • 5. Sublime Text
    • 6. 总结

1. 目的

CMake 已经是开源 C++ 项目的主流 building system, 这里简单调研关注的编辑器 / IDE 下, CMake 语法高亮情况。如果你写C++, 那你很大概率会接触到基于 CMake 构建的 C++ 工程,而阅读和编写 CMake 代码其实已经是 C++ 工程师的必备技能之一了。本文带你了解主流的跨平台编辑器/IDE的CMake颜色高亮情况。

2. VSCode 插件

CMake 和 CMake Tools

搜索到第一个 cmake 插件,名字就叫 CMake, 作者 twxs, 最后一次更新是 2017 年。
在这里插入图片描述
好奇, 一个2017年的插件,为啥下载量持续第一, 比排名第二的微软官方出品(其实是收编了 vector-of-bool 的插件)还要多?因为 CMake Tools 默认会安装扩展包, 扩展包目前只有一个, 就是 twxsCMake 插件。也就是说, 只要用户安装了名为 CMake Tools 插件, 就会安装 名为 CMake 的插件。颇有一种防止自己被判为垄断的感觉:
在这里插入图片描述

如果你删除了 CMake 插件, 就没有代码高亮了。我们以开源 C++ 项目 doxygen 为例:

在这里插入图片描述

CMake Language Support

接下来尝试排名第三的 CMake Language Support:
在这里插入图片描述
它的语法高亮做的比较好, 至少第一眼看到 cmake_minimum_required(VERSION 3.20) 里面的 VERSION 被高亮了:

在这里插入图片描述
而相应的, 需要安装 .NET 6, 如果网络不好需要手动安装下:
在这里插入图片描述
CMake Lanauge Support 插件还支持跳转。啥意思呢?普通用户可以不写 cmake 函数, 但包含某个 cmake 文件, 还是挺常见的操作;这个插件允许你跳转到包含的文件
在这里插入图片描述
函数跳转: 我们从 doxygen 的 cmake/git_watcher.cmake 文件147行,找到调用的 GetGitState() 函数,光标放到函数名称中间,按下ctrl键, 可以看到出现了超链接下划线,点击鼠标可以跳转到定义。
在这里插入图片描述
代码折叠,不在话下:
在这里插入图片描述

CMake Highlights

这是本人基于 twxs 插件的魔改版本,本来想着自己用为主, 考虑到电脑比较多,不如直接发布到 marketplace, 结果现在下载量超过7000了。主要修改是增加了一些关键字的高亮。
在这里插入图片描述

3. JetBrains 系列

3.1 CLion

语法高亮相当不错,并且也可以跳转到函数定义

3.2 Fleet

语法高亮颜色的主题和 Clion 还不一样的, 不过 VERSION 没有高亮:
在这里插入图片描述

函数定义无法跳转,有点失望的
在这里插入图片描述

4. Kate

Kate 编辑器是 KDE 系列的编辑器,可以在 Linux 下很好的使用。此外还提供了 MacOSX、 Windows 的版本, 跨平台使用业务压力,著名开源项目 ncnn 的作者 NiHui 就是用 Kate 编辑器写出了 ncnn。

Kate 对于 CMake 的语法高亮相当不错,option 的 ON/OFF 都贴心的给了不同颜色:
在这里插入图片描述
不过 Kate 的颜色似乎偏向亮度较高的颜色,看起来略有不舒服,其实本人更希望看到一些浅色系的
在这里插入图片描述

5. Sublime Text

用到的插件是 github.com/zyxar/Sublime-CMakeLists 的 CMake 插件
在这里插入图片描述
解析出的 AST 还是可以的, 至少 VERSION 识别并高亮了。而且变量名字以及取值 OFF/ON 都是不那么晃眼的白色,option() 是淡雅的黄色, 还是比较舒服的:
在这里插入图片描述

6. 总结

这里仅仅列出跨平台的、本人常用的几个编辑器/IDE里的CMake高亮情况, 不是很全, 但是跨平台效果能保持一致。

首先推荐 VSCode,不管是新人还是老手

  • 建议直接无脑用 CMake Language Support
  • 如果你确实发现微软的 CMake Tools 还不错(我没关注它在语法高亮之外的功能),建议删掉 twxs 的 CMake 插件, 可以安装我写的 CMake Highlights 作为替代
  • 其他 CMake 插件,在高亮方面,不推荐

对于其他编辑器 / IDE:

  • CLion 的 CMake 支持相当用心,不过,建立索引特别容易让电脑风扇吵起来
  • Kate 的高亮, 颜色纯度太高了, 淡一点就好了
  • SublimeText:也还不错

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/640150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jetson nano 进阶教程4_通过IIC输出PWM

Jetson nano 进阶教程4_通过IIC输出PWM Jetson nano的40PIN不能直接发出PWM波,在很多控制舵机,电机调速方面很不方便,因此利用一块PCA9685模块,通过I2C总线控制PCA9685输出pwm波,并且可以调整占空比。 How do I use P…

Android Activity启动过程详解

目录 一,背景介绍 二,Activity启动过程 2.1 调用 ATMS 系统进程 2.1.1 时序图 2.1.2 Launcher 桌面的 App 图标入口 2.1.3 startActivitySafely() 方法 2.1.4 execStartActivity() 方法 2.2 ATMS 向 AMS 发送创建应用进程的过程 2.2.1 时序图 …

03- 流程控制(C语言)

一 概述 C语言支持三种程序运行结构:顺序结构、选择结构、循环结构。 顺序结构:按照语句编写的顺序 上到下逐句执行。选择结构:也叫 分支结构,依据是否满足条件,有选择的执行相应功能。循环结构:依据条件…

动态字符串SDS

基本概括 Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 但Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题(C语言中实际上没有字符串,本质上是字符数…

面向对象的封装

9. 面向对象特征一:封装性(encapsulation) 什么是封装 就像快递一样我们在网上买的物品,快递都会给我们添加外包装,给我们封装起来,这就是封装 客观世界里每一个事物的内部信息都隐藏在其内部,外界无法直接操作和修改…

怎样才算一个计算机知识体系完整的毕业生

为什么突然想写这个话题呢? 最近有不少新关注的读者,在后台问:大学学 Java 和 C 哪个好找工作,学前端好还是后端好,该学 Vue 还是 React。。。 仿佛看到了自己当年的模样,所以觉得有必要单独写一篇文章&a…

CSS基础学习--8 盒子模型(Box Model)

一、介绍 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实…

调用阿里API实现图片中的文字识别

作者介绍 王雪玉,女,西安工程大学电子信息学院,2022级研究生 研究方向:机器视觉与人工智能 电子邮件:2239580540qq.com 王泽宇,男,西安工程大学电子信息学院,2022级研究生&#xf…

网规例题(二)

解题思路: 1.发送150000字节大小IP报文 数据帧长1518字节 首部18字节 可用数据1500字节 因此需要发送 100个数据帧 1518字节 1518*8 bit 带宽10 Mb/s 10 000 000 bps (一)发送100个数据帧的发送时延 0.12144 秒 (二&#…

Java程序员不得不知道的一些设计模式

1、什么是设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢…

【arXiv2303】Learning with Explicit Shape Priors for Medical Image Segmentation

Learning with Explicit Shape Priors for Medical Image Segmentation, aXiv2303 解读:SPM: 一种即插即用的形状先验模块,可轻松嵌入任意编解码架构,助力涨点并显著改善分割效果! (qq.com) 论文:https://arxiv.org/…

基于Air103的DAP-link的硬件介绍

原文及固件链接 视频介绍链接 xkb7070-z 自锁式按键 上电开关 WAFER-SH1.0-6PWB 1.0间距卧贴插座 下载及通信接口 A2-4PA-2.54DS 4Pin接插件 纯下载接口 Air32F103CBT6 lqfp48 216MHz 256K Flash 32K RAM UD/UD- DP&DM信号 USB的差信号 R1 DIO监听 限流 PM254-2-04-W…

【3DsMAX】从零开始建房(7)

目录 1. 制作屋顶小船剩余部分 2. 制作小广告牌 1. 制作屋顶小船剩余部分 新建一个平面 长度分段设置为1 转换成可编辑多边形后,对边进行缩放 同样的方法再添加一个平面 添加“壳” 新建一个圆柱体作为桅杆 选中圆柱的底面,点击插入 挤出 将顶部的点缩…

深入理解深度学习——Transformer:编码器(Encoder)部分

分类目录:《深入理解深度学习》总目录 Transformer中的编码器不止一个,而是由一组 N N N个编码器串联而成。一个编码器的输出作为下一个编码器的输入。在下图中有 N N N个编码器,每一个编码器都从下方接收数据,再输出给上方。以此…

7年测试经验之谈,什么是模糊测试?

背景:近年来,随着信息技术的发展,各种新型自动化测试技术如雨后春笋般出现。其中,模糊测试(fuzz testing)技术开始受到行业关注,它尤其适用于发现未知的、隐蔽性较强的底层缺陷。这里&#xff0…

类的多继承的派生类的虚表的一些问题

虚表保存的其实并不是虚函数的地址,而是他的到jmp地址。 上我们的操作代码 class A { public:virtual void func1(){}virtual void func2(){}int a 1; };class B { public:virtual void func1(){}virtual void func2(){}int b 2; };class C : public A, public …

SAP HANA内存

用着用着HANA 数据库就慢了,原因都出在内存。 内存不足无非几个原因: 1.你的机器物理内存不足,这个好办,花钱扩。 2.你的HANA License容量不足,这个也好办,申请更大容量的内存License 3.你机器分配给HAN…

爬虫案例-使用Session登录指定网站(JS逆向AES-CBC加密+MD5加密)

总体概览:使用Session登录该网站,其中包括对password参数进行js逆向破解 (涉及加密:md5加密AES-CBC加密) 难度:两颗星 目标网址:aHR0cHM6Ly93d3cuZnhiYW9nYW8uY29tLw 下面文章将分为四个部分…

在后大流行时代利用Airbnb实现逆周期增长

回望近十年共享经济的发展历程,谁也不曾想到,最被看好的共享经济代表Uber竟在连年亏损后忍痛IPO,上市首日即破发,而主打「互联网房地产」模式的独角兽WeWork则上市失败,迅速失血,一度走到破产边缘。作为“共…

模型剪枝:Network Slimming剪枝实战

本文来自公众号“AI大道理” ​ Network Slimming剪枝是比较广泛的一种模型剪枝方法,作者来自清华大学、英特尔中国实验室、复旦大学和科内尔大学。 1、Network Slimming剪枝理论 Network Slimming剪枝是结构性剪枝,是通道剪枝,是静态剪枝…