当前位置: 首页 > ops >正文

CMake指令:mark_as_advanced

目录

1.简介

2.核心作用

3.使用示例

4.常见使用场景

5.注意事项

6.总结

相关链接


1.简介

        在 CMake 中,mark_as_advanced() 是一个用于控制变量在配置工具(如 CMake GUI、ccmake)中显示行为的命令。它的核心功能是将指定变量标记为 “高级变量”,使其在默认视图中隐藏,仅当用户主动切换到 “显示高级选项” 模式时才可见。

        基本语法:

mark_as_advanced([CLEAR|FORCE] <变量1> <变量2> ...)
  • 参数说明
    • <变量1> <变量2> ...:需要标记为高级的变量名称(多个变量用空格分隔)。
    • CLEAR(可选):清除变量的 “高级” 标记,使其恢复为默认可见状态。
    • FORCE(可选,默认也时FORCE,不填写也是FORCE),标记为高级变量名称

2.核心作用

CMake 项目中会产生大量变量(如编译选项、路径配置、第三方库信息等),其中部分变量是普通用户无需关心的(如内部调试参数、系统自动检测的路径)。mark_as_advanced() 的作用是:

  • 简化配置界面:隐藏高级变量,减少普通用户的认知负担。
  • 区分配置层级:让关键变量(如 BUILD_TESTINGCMAKE_INSTALL_PREFIX)保持可见,高级变量(如编译器细节、内部缓存值)默认隐藏。

3.使用示例

1.标记高级变量(默认隐藏)

假设项目中有一个仅用于开发者调试的变量 ENABLEABLE_DEBUG_LOG,普通希望普通用户修改,可将其标记为高级:

# 定义一个调试用的变量(缓存变量,允许用户通过 -D 或 GUI 修改)
set(ENABLE_DEBUG_LOG OFF CACHE BOOL "Enable用详细调试日志(仅开发者使用)")# 将其标记为高级变量(默认在 GUI 中隐藏)
mark_as_advanced(ENABLE_DEBUG_LOG)

在 CMake GUI 中:

  • 默认情况下,ENABLEABLE_DEBUG_LOG 不会显示。
  • 勾选 “Advanced” 选项后,该变量才会出现在配置列表中。

2.清除高级标记(恢复可见)

如果需要让某个已标记为高级的变量重新在默认视图中可见,可使用 CLEAR 选项:

# 假设之前已将 MY_VAR 标记为高级
mark_as_advanced(MY_VAR)# 现在需要恢复其可见性
mark_as_advanced(CLEAR MY_VAR)

3.批量标记多个变量

项目中可能有多个关联的高级变量(如第三方库的内部配置),可批量处理:

# 第三方库的路径变量(普通用户无需修改)
set(LIBFOO_INCLUDE_DIR "" CACHE PATH "libfoo 头文件路径")
set(LIBFOO_LIBRARY "" CACHE FILEPATH "libfoo 库文件路径")# 批量标记为高级变量
mark_as_advanced(LIBFOO_INCLUDE_DIR LIBFOO_LIBRARY)

4.常见使用场景

1.隐藏系统自动检测的变量

CMake 自动检测的系统信息(如 CMAKE_SYSTEM_NAMECMAKE_C_COMPILER)通常默认被标记为高级,避免用户误修改。

2.内部调试 / 开发变量

仅开发者需要调整的参数(如 LOG_LEVELENABLE_ASSERTIONS),标记为高级可减少普通用户的困惑。

3.第三方库的细节配置

查找第三方库时生成的变量(如 Boost_INCLUDE_DIRQt5_DIR),普通用户无需关心,标记为高级更合适。

5.注意事项

  • 不影响变量功能mark_as_advanced() 仅控制变量在配置工具中的显示,不改变变量的实际值或作用(变量仍可通过 -D<变量名>=<值> 命令行参数修改)。
  • 核心变量不建议标记:项目关键配置变量(如 BUILD_SHARED_LIBSCMAKE_BUILD_TYPE)应保持默认可见,方便用户调整。
  • 尊重内置变量的默认设置:CMake 内置变量(如 CMAKE_INSTALL_PREFIX)已有预设的可见性,除非特殊需求,无需手动修改。

6.总结

        mark_as_advanced() 是优化 CMake 配置体验的实用工具,通过合理区分普通变量和高级变量,既能简化普通用户的配置流程,又能为高级用户保留必要的调整入口。在大型项目中,这一命令能有效提升配置界面的清晰度和易用性。

相关链接

  • CMake 官网 CMake - Upgrade Your Software Build System
  • CMake 官方文档:CMake Tutorial — CMake 4.1.0-rc4 Documentation
  • CMake 源码:https://github.com/Kitware/CMake
  • CMake 源码:CMake · GitLab
  • 中文版基础介绍: CMake 入门实战 | HaHack
  • wiki: Home · Wiki · CMake / Community · GitLab
  • Modern CMake 简体中文版:  Introduction · Modern CMake
http://www.xdnf.cn/news/16829.html

相关文章:

  • Python序列去重高级指南:保持顺序的高效去重技术
  • 错误: 找不到或无法加载主类 原因: java.lang.ClassNotFoundException
  • 云原生三剑客:Kubernetes + Docker + Spring Cloud 实战指南与深度整合
  • 分类任务当中常见指标 F1分数、recall、准确率分别是什么含义
  • 类似 Pixso 但更侧重「网页 / 软件界面设计」「前后端可视化开发」的工具
  • 【贪心】P11112 [ROI 2024] 机器人物流 (Day 1)|普及+
  • 基于python多光谱遥感数据处理、图像分类、定量评估及机器学习方法应用
  • Java函数式编程之【Stream终止操作】【下】【二】【收集器toMap()】【叁参数收集操作collect()】
  • Maven项目和Spring项目的异同
  • 企业资产|企业资产管理系统|基于springboot企业资产管理系统设计与实现(源码+数据库+文档)
  • Docker容器中文PDF生成解决方案
  • 计算机网络:为什么IPv6没有选择使用点分十进制
  • Pytorch-02数据集和数据加载器的基本原理和基本操作
  • Matplotlib - Python图表可视化利器
  • 面试小总结
  • vue引入阿里巴巴矢量图库的方式
  • 内网穿透系列十:高性能内网穿透工具 rathole,支持Docker一键部署
  • ubuntu 系统风扇控制软件 CoolerControl
  • AI驱动SEO关键词智能进化
  • Ubuntu18网络连接不上也ping不通网络配置问题排查与解决方法
  • Python 第一阶段测试题 答案及解析
  • 【正点原子K210连载】第二十四章 按键输入实验 摘自【正点原子】DNK210使用指南-CanMV版指南
  • Linux iptables防火墙操作
  • SQL 四大语言分类详解:DDL、DML、DCL、DQL
  • 【Go语言-Day 29】从time.Now()到Ticker:Go语言time包实战指南
  • C#开发入门指南_学习笔记
  • 【DL学习笔记】DL入门指南
  • 从数据丢失到动画流畅:React状态同步与远程数据加载全解析
  • 谈谈WebAssembly、PWA、Web Workers的作用和场景
  • 记一次Windwos非常离谱的系统错误,IPF错误,程序构建卡顿,程序启动卡顿。。。