CMake ccmake 终端配色定制完全指南:CCMAKE_COLORS 环境变量详解
构建工具开发工具CLI【免费下载链接】CMakeMirror of CMake upstream repository项目地址https://gitcode.com/gh_mirrors/cm/CMake点击查看免费下载CCMAKE_COLORS 是 CMake 内置的 curses 图形化配置界面ccmake的终端配色环境变量自 CMake 3.18 起支持它让开发者可以按缓存变量类型自定义界面中各类条目在终端里的显示颜色。本文以 Help/envvar/CCMAKE_COLORS.rst 为骨架结合 Source/CursesDialog 下 cmCursesColor 及各类控件小部件的源码实现系统讲解该变量的语法规则、颜色取值、底层解析逻辑与实战配置方法读完你即可为自己的 ccmake 界面定制一套清晰可辨的配色方案。CCMAKE_COLORS 是什么ccmake是 CMake 提供的基于 curses 的交互式缓存配置界面对应可执行文件源码位于 Source/CursesDialog/ccmake.cxx。当它在支持颜色的终端中运行时会为不同类型的缓存条目赋予不同的前景色便于快速区分字符串值STRING路径值FILEPATH带候选选项的值choices开启/关闭的布尔值BOOLCCMAKE_COLORS环境变量正是用来控制这些颜色的入口。它由 CMake 3.18 版本引入在 Help/release/3.18.rst 的发布说明中记录为ccmake(1) learned to read a CCMAKE_COLORS environment variable。需要强调的是该变量只在ccmake界面中生效对命令行形式的cmake配置过程没有影响并且只对支持颜色的终端有意义HasColors()会先检查 curses 是否支持颜色详见下文源码分析。语法规则沿用 LS_COLORS 的惯例CCMAKE_COLORS的语法与 Unix 环境中广为人知的LS_COLORS保持一致一系列由冒号:分隔的键值key/value对。例如官方文档给出的完整示例CCMAKE_COLORSs39:p220:c207:n196:y46键Key缓存变量类型标识每个键是一个单字母对应一种 CMake 缓存变量类型键对应缓存变量类型说明sSTRING字符串类型条目pFILEPATH文件/目录路径类型条目cchoices带有关联候选选项列表的值yBOOL真值值为类似ON、YES等真值形式的布尔条目nBOOL假值值为类似OFF、NO等假值形式的布尔条目这五个键与源码中的五个颜色对color pair一一对应。在 Source/CursesDialog/cmCursesColor.h 中定义了枚举BoolOff 1, // 对应键 nBOOL 假值 BoolOn, // 对应键 yBOOL 真值 String, // 对应键 sSTRING Path, // 对应键 pFILEPATH Choice // 对应键 cchoices其中编号 0 被保留给默认颜色对实际颜色从 1 开始。值Value颜色编号每个值是一个整数指定要使用的颜色0表示黑色官方文档特别提示你大概不想用它其余数值由你的终端颜色支持能力决定——大多数彩色终端至少支持 8 或 16 色部分支持多达 256 色256 色终端的颜色编号通常与 xterm 256 色调色板一致而前 16 色可能与原始的 CGA 调色板吻合许多现代终端模拟器还允许用户自行配置前 16 色的具体色值。这也解释了官方示例中各值的取法s39、p220、c207、n196、y46都是针对 256 色终端挑选的编号例如n196属于高亮的红色系、y46属于亮绿色系在 16 色终端上这些编号会被 curses 按自身调色板解释。源码级解析原理配色变量的解析逻辑全部集中在 Source/CursesDialog/cmCursesColor.cxx 中理解它有助于把握该变量的全部行为细节。解析入口与缓存GetColor(char id, short fallback)使用static局部变量env一个std::unordered_mapchar, short缓存解析结果并且只在第一次调用时通过getenv(CCMAKE_COLORS)读取环境变量后续调用直接查表避免重复解析。关键解析规则对应文档中校验极少的说法对照源码 cmCursesColor.cxx可以确认以下几点行为键的大小写不敏感键字符经过cmsysString_toupper(*v)统一转成大写再存入映射因此S39与s39效果相同。按冒号切分键值对strchr(v, :)定位下一个冒号逐个切分格式为键值循环条件要求第二个字符是。解析为整数值部分通过atoi(buffer)转成整数。宽松的错误容忍0会被丢弃if (c c COLORS)中的c 短路超过终端支持上限COLORS的值会被静默忽略超长字段会直接中止解析。这就是文档所说的对坏颜色或坏语法只做相当少的最小化检查——错误不会导致程序崩溃只是该条目回退到默认颜色。默认配色与回退逻辑InitColors()cmCursesColor.cxx在支持颜色时依次调用start_color()、use_default_colors()然后用init_pair初始化五个颜色对。每个颜色对都调用GetColor并携带一个 fallback 默认值颜色对键默认颜色fallback对应条目BoolOffNCOLOR_RED红BOOL 假值BoolOnYCOLOR_GREEN绿BOOL 真值StringSCOLOR_CYAN青STRINGPathPCOLOR_YELLOW黄FILEPATHChoiceCCOLOR_MAGENTA品红choices也就是说未设置CCMAKE_COLORS时ccmake 会使用上面这套默认配色设置了但某个键缺失或值无效时仅该键回退到默认色其余键仍按配置生效。颜色能力探测HasColors()cmCursesColor.cxx受编译期宏HAVE_CURSES_USE_DEFAULT_COLORS保护在支持use_default_colors()的 curses 实现上返回has_colors()的探测结果。若终端不支持颜色或编译时未启用该特性所有控件将回退到A_NORMAL/A_STANDOUT的高亮显示风格CCMAKE_COLORS将不产生任何效果。各缓存条目类型的着色实现源码中不同类型条目通过各自控件小部件的构造函数将对应颜色对应用到表单字段上set_field_fore/set_field_back与文档中的键定义一一对应布尔条目cmCursesBoolWidget.cxx 中值为ON时使用COLOR_PAIR(cmCursesColor::BoolOn)对应键y值为OFF时使用BoolOff对应键n切换值时会即时刷新颜色。字符串条目cmCursesStringWidget.cxx 使用COLOR_PAIR(cmCursesColor::String)对应键s。路径条目cmCursesPathWidget.cxx 使用COLOR_PAIR(cmCursesColor::Path)对应键p文件路径条目 cmCursesFilePathWidget.cxx 继承自路径小部件同样归属该键。选项条目cmCursesOptionsWidget.cxx 使用COLOR_PAIR(cmCursesColor::Choice)对应键c用于显示带候选列表的条目。所有这些小部件在检测到cmCursesColor::HasColors()为假时都会统一退回到A_NORMAL/A_STANDOUT组合保证在纯色终端上仍可辨识。实战配置示例终端中临时设置在支持 256 色或至少 16 色的终端里启动 ccmake 前导出该变量即可CCMAKE_COLORSs39:p220:c207:n196:y46 ccmake /path/to/source这条示例的含义是s39STRING 条目使用 39 号颜色蓝色系p220FILEPATH 条目使用 220 号颜色琥珀/黄色系c207choices 条目使用 207 号颜色洋红/粉色系n196假值 BOOL 使用 196 号颜色亮红警示感强y46真值 BOOL 使用 46 号颜色亮绿。写入 shell 配置文件持久生效想让配色对所有终端会话生效可将变量加入 shell 的配置文件# ~/.bashrc 或 ~/.zshrc export CCMAKE_COLORSs39:p220:c207:n196:y46之后在任意终端运行ccmake即可看到自定义配色。与 LS_COLORS 的异同两者语法同源冒号分隔的键值对但语义完全不同LS_COLORS的键描述文件类型目录、符号链接、可执行文件等而CCMAKE_COLORS的键描述的是 CMake 缓存变量的类型s/p/c/y/n五种。如果你熟悉LS_COLORS可以无缝迁移书写习惯但键集合与默认值都需要按上文表格重新对应。常见问题排查现象可能原因与建议设置了变量但颜色没变化终端不支持颜色HasColors()返回 false或编译的 curses 库不含use_default_colors支持或当前使用的 CMake 版本早于 3.18某个颜色编号失效编号大于终端支持的COLORS上限例如 8 色终端上用 220源码会静默忽略并回退默认色写错键名或语法错误解析器只做最小化检查错误键会被忽略其余正确键仍生效不会报错中断颜色值想用 00表示黑色且会被解析器丢弃效果等同于未配置该键小结CCMAKE_COLORS以极低的配置成本为ccmake提供了细粒度的终端配色控制仿LS_COLORS的冒号键值对语法 五种缓存变量类型键 整数颜色编号加上源码中宽松解析、默认回退的稳健设计使其在任何环境下都不会破坏界面可用性。从 cmCursesColor.cxx 的解析实现到各控件小部件的着色挂接整个链路清晰完整——如果你需要进一步研究 ccmake 的界面实现Source/CursesDialog 目录下的控件源码是绝佳的起点。赞分享构建工具开发工具CLI【免费下载链接】CMakeMirror of CMake upstream repository项目地址https://gitcode.com/gh_mirrors/cm/CMake点击查看免费下载相关推荐eza 颜色定制完全指南EZA_COLORS 与 LS_COLORS 环境变量详解eza 颜色定制完全指南EZA_COLORS 与 LS_COLORS 环境变量详解 本指南以 man/eza_colors.5.md https://linkCLI开发工具ZeroTermux 终端色彩定制指南dircolors 命令与 LS_COLORS 环境变量完全解析ZeroTermux 终端色彩定制指南dircolors 命令与 LS_COLORS 环境变量完全解析 导读 在 ZeroTermux 这类运行于 Andro移动开发开发工具eza 颜色与主题定制完全指南EZA_COLORS 环境变量与 theme.yml 详解eza 颜色与主题定制完全指南EZA_COLORS 环境变量与 theme.yml 详解 eza现代版 ls 在终端输出中对文件名、权限位、大小、日期、GCLI开发工具上一篇react-admin 软删除系列useHardDelete Hook 彻底删除已删记录实战指南下一篇non_decomp 实战指南用 logit-adjusted 成本敏感损失训练过参数化模型优化不可分解目标NeurIPS 2021 代码复现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

从源码构建 LAMMPS 官方文档:doc 目录结构、make 与 CMake 双通道构建实战指南

从源码构建 LAMMPS 官方文档:doc 目录结构、make 与 CMake 双通道构建实战指南

科研科学计算高性能计算 【免费下载链接】lammps Public development project of the LAMMPS MD software package 项目地址: https://gitcode.com/gh_mirrors/la/lammps 点击查看 免费下载 导读:本文以 doc/src/Build_manual.rst 为骨架,系…

2026/10/5 2:24:36 阅读更多 →
如何快速实现网盘直链下载:网盘直链下载助手完整入门指南(支持 9 大网盘)

如何快速实现网盘直链下载:网盘直链下载助手完整入门指南(支持 9 大网盘)

如何快速实现网盘直链下载:网盘直链下载助手完整入门指南(支持 9 大网盘) 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百…

2026/10/5 2:23:35 阅读更多 →
captcha 行为验证码 Flutter 接入实战指南:滑动拼图与点选文字组件的集成、加密与二次校验

captcha 行为验证码 Flutter 接入实战指南:滑动拼图与点选文字组件的集成、加密与二次校验

后端应用安全图像处理 【免费下载链接】captcha 行为验证码(滑动拼图、点选文字),前后端(java)交互,包含h5/Android/IOS/flutter/uni-app的源码和实现 项目地址: https://gitcode.com/gh_mirrors/captc/captcha 点击查看 免费下载 导读 本文…

2026/10/5 2:23:35 阅读更多 →

最新新闻

微软驱动签名新规:Windows 11开发者与用户应对指南

微软驱动签名新规:Windows 11开发者与用户应对指南

最近这半年,微软针对驱动签名出了好几条新规,做驱动开发的和装驱动机器上遇到问题的普通用户,两边都被折腾得不轻。开发圈子最先感受到变化——以前“用 EV 证书签完名就能装”的老套路开始失灵,系统在加载驱动时不再只看签名有没…

2026/10/5 3:02:49 阅读更多 →
用分布式思维编排AI编程任务:多会话并行提升产出效率

用分布式思维编排AI编程任务:多会话并行提升产出效率

你在终端里敲下一条指令,给Claude Code或者Codex描述了一个听起来不算复杂的需求,然后看着它吭哧吭哧干了十几分钟,最后发现它不仅绕了一大圈,还把不该碰的文件也改了,甚至中途停下来问你一个五分钟前已经回答过的问题…

2026/10/5 3:02:49 阅读更多 →
十字斜入十字识别与决策:从图像特征到状态机控制

十字斜入十字识别与决策:从图像特征到状态机控制

如果你正在做摄像头组的智能车,大概率会对“十字”这个元素印象深刻。它不像环岛或者坡道那样需要一套复杂的绕行动作,但恰恰因为它看起来简单,翻车的队伍一点都不少。尤其是“斜入十字”,也就是车身从侧向以一个夹角冲进十字区域…

2026/10/5 3:02:49 阅读更多 →
高性能序列化库选型与优化实战:从JSON到Protobuf、FlatBuffers

高性能序列化库选型与优化实战:从JSON到Protobuf、FlatBuffers

序列化库是每个后端工程师都躲不开的组件。最近因为一个支付系统的数据同步模块遇到性能瓶颈,我把手头的高性能序列化库整个折腾了一遍,从选型对比到落地优化踩了不少坑,今天把这些经验整理出来。这篇文章适合正在做微服务通信、消息队列、缓…

2026/10/5 3:02:49 阅读更多 →
C#学生成绩管理系统:三层架构与数据库设计全解析

C#学生成绩管理系统:三层架构与数据库设计全解析

简介:这是一个基于C#与Access数据库的《学生成绩管理系统》课程作业完整项目,适合正在学习C#、数据库编程或需要完成类似课设的初学者参考。系统涵盖学生、课程、成绩三类核心数据的录入、查询、修改与删除,并实现了Windows窗体界面、ADO.NET…

2026/10/5 3:02:49 阅读更多 →
专科生写论文必备:8个亲测有效的AI工具清单

专科生写论文必备:8个亲测有效的AI工具清单

写这篇推荐的时候,我其实挺有感触的。我自己是专科出身,当年写毕业论文的时候是真的头疼。不是不努力,是没方法。选题不知道怎么选,文献看了就困,写出来的东西自己都觉得像流水账,改到第三稿的时候连导师都…

2026/10/5 3:01:49 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →