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

CMake变量赋值

CMake变量赋值

    • set / unset
    • **变量的区别**
      • 1、普通变量
      • 2、CACHE变量
      • 3、ENV变量
      • 4、父作用域

set / unset

命令语法说明
setset(<变量> <值> [CACHE <类型> <描述>] [FORCE])设置变量
unsetunset(<变量> [CACHE])删除变量

变量的区别

特性普通变量Cache 变量ENV 变量
作用域当前目录/函数全局(项目)CMake进程
持久化❌ 否✅ 是(CMakeCache.txt)❌ 否
系统可见❌ 否❌ 否⚠️ 子进程可见
生命周期单次运行跨运行保持CMake进程期间
修改语法set(VAR ...)set(VAR ... CACHE ...)set(ENV{VAR} ...)
读取语法${VAR}${VAR}$ENV{VAR}

1、普通变量

set(<name> <value>)
unset(<name>)

# ── 普通变量 ──────────────────────────────────set(USER_NAME"张三")message(STATUS"名字:${USER_NAME}")unset(USER_NAME)message(STATUS"删除后名字:${USER_NAME}")# ── 列表变量 ──────────────────────────────────set(SRC_FILES main.cpp utils.cpp config.cpp)message(STATUS"源文件:${SRC_FILES}")unset(SRC_FILES)message(STATUS"删除后源文件:${SRC_FILES}")

2、CACHE变量

CACHE 类型使用说明

1、命令行传参覆盖:-D{name}={value}
2、FORCE强制覆盖

类型说明示例
STRING字符串set(NAME "abc" CACHE STRING "名称")
BOOL布尔值 ON/OFFset(ENABLE_TEST ON CACHE BOOL "启用测试")
PATH目录路径set(DATA_DIR "/data" CACHE PATH "数据目录")
FILEPATH文件路径set(CFG_FILE "/etc/app.conf" CACHE FILEPATH "配置文件")
INTERNAL内部变量,不在GUI显示set(VERSION "1.0" CACHE INTERNAL "版本")
# ── CACHE 变量(可被 -D 命令行覆盖)──────────# CACHE, STRING变量set(MY_PORT8080CACHE STRING"CACHE变量STRING类型")# cmake -DMY_PORT=9090 .. 可覆盖message(STATUS"MY_PORT:${MY_PORT}")# CACHE, BOOL变量set(USE_USER_LIBS ON CACHE BOOL"CACHE变量BOOL类型")message(STATUS"USE_USER_LIBS:${USE_USER_LIBS}")unset(USE_USER_LIBS CACHE)# CACHE, PATH变量set(USE_USER_DIR"/usr/local"CACHEPATH"CACHE变量PATH类型")message(STATUS"USE_USER_DIR:${USE_USER_DIR}")unset(USE_USER_DIR CACHE)# CACHE, FILEPATH变量set(USE_USER_CFG_FILE"/usr/local/123.cfg"CACHE FILEPATH"CACHE变量FILEPATH类型")message(STATUS"USE_USER_CFG_FILE:${USE_USER_CFG_FILE}")unset(USE_USER_CFG_FILE CACHE)# CACHE, INTERNAL变量set(INTERNAL_VAR"hello-world"CACHE INTERNAL"CACHE变量INTERNAL类型")message(STATUS"INTERNAL_VAR:${INTERNAL_VAR}")unset(INTERNAL_VAR CACHE)# ── FORCE 强制覆盖 CACHE 变量 ─────────────────set(MY_PORT7070CACHE STRING"服务端口号"FORCE)message(STATUS"强制覆盖MY_PORT:${MY_PORT}")unset(MY_PORT CACHE)

3、ENV变量

set(ENV{MY_ENV}"hello")message(STATUS"环境变量:$ENV{MY_ENV}")unset(ENV{MY_ENV})message("取消后变量MY_ENV:$ENV{MY_ENV}")# 追加到环境变量set(ENV{PATH}"$ENV{PATH}:/new/path")# 常见环境变量message(STATUS"PATH:$ENV{PATH}")message(STATUS"USERPROFILE:$ENV{USERPROFILE}")message(STATUS"TEMP:$ENV{TEMP}")message(STATUS"JAVA_HOME:$ENV{JAVA_HOME}")message(STATUS"CMAKE_HOME:$ENV{CMAKE_HOME}")message(STATUS"USER_HOME:$ENV{USER_HOME}")

4、父作用域

set(PARENT_VAR"父级变量")function(my_func)# 函数内部的局部变量set(LOCAL_VAR"函数内局部变量")message("函数内: LOCAL_VAR =${LOCAL_VAR}")message("函数内: PARENT_VAR =${PARENT_VAR}")# 修改父作用域的变量set(PARENT_VAR"父级变量-函数内修改后"PARENT_SCOPE)# 在父作用域创建新变量set(NEW_VAR"函数内创建父级变量"PARENT_SCOPE)endfunction()# 调用函数my_func()message("函数外: PARENT_VAR =${PARENT_VAR}")message("函数外: LOCAL_VAR =${LOCAL_VAR}")message("函数外: NEW_VAR =${NEW_VAR}")
http://www.cnnetsun.cn/news/3026704.html

相关文章:

  • 基于DeepSeek的AI作文批改系统
  • 公共子序列(动态规划)
  • Agent Harness:2026 年 AI 工程最重要的概念,一篇文章讲透
  • AI 写小说能力深度评测与实战指南
  • 这9款开发工具夯爆了,用了都说好
  • AI漫剧剪辑生成主流AI创作工具与工作流盘点
  • 告别随手记事杂乱无章,一站式收纳生活工作任务,条理规划日程完整步骤
  • 快手Keye-VL-2.0从零上手:30B模型看懂2小时视频,256K上下文+Agent能力部署全指南
  • Spring AI 实战指南(十七):企业级 Multi-Agent 协作体系设计与任务分解实践
  • 626:内存流;bitmapImage.CacheOption;类级变量释放;噪点;_halconControl
  • 鸿蒙(HarmonyOS)- 怎么在DevEcoStudio中通过真机操作日志相关
  • 每日 AI 研究简报 · 2026-06-26
  • 2026开学季语音识别工具深度盘点 务实选择指南
  • 动图魔方技术拆解 15:ArkTS 深浅色与跟随系统的应用级 ColorMode 实战
  • AI 推理成本治理:从模型量化到请求调度的全链路降本策略
  • 实战:怎么把设备树和 /dev 节点真正连起来
  • 暑假30天,普通大学生如何把Java水平直接提升一个档次
  • Prompt 已经不够用了:复杂 AI 任务真正需要的是任务接口设计
  • NCU性能分析工具使用指南:从安装到结果解读
  • MyBatis-Plus环境搭建和单表的curd操作
  • AI 创意工具产品化:从技术 Demo 到可交付产品的三道坎
  • HypoMux | 多网卡带宽并发聚合下载加速工具
  • 隧道代理和普通代理有什么区别?看完秒懂选对不踩坑
  • MyBatis-Plus 通用 Service 与常用注解
  • 【数据库系统原理】第35篇:自主访问控制与强制访问控制:权限传递与安全标记
  • 用Matlab进行无线电信号逆向实战2——立体声 FM 广播的分离与解密 从频谱迷宫到相干解调的避坑指南
  • 数据分析转大模型:从工具接入到项目提效
  • OWTB 3PL 智慧仓储管理系统 - AI员工增强版工种清单
  • 滑动文本控件样例工程以及使用详解
  • 2026年下半年量化工具怎么选,先匹配能力基础