CMake变量赋值

发布时间:2026/6/27 3:37:27

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 STRINGCACHE变量STRING类型)# cmake -DMY_PORT9090 .. 可覆盖message(STATUSMY_PORT:${MY_PORT})# CACHE, BOOL变量set(USE_USER_LIBS ON CACHE BOOLCACHE变量BOOL类型)message(STATUSUSE_USER_LIBS:${USE_USER_LIBS})unset(USE_USER_LIBS CACHE)# CACHE, PATH变量set(USE_USER_DIR/usr/localCACHEPATHCACHE变量PATH类型)message(STATUSUSE_USER_DIR:${USE_USER_DIR})unset(USE_USER_DIR CACHE)# CACHE, FILEPATH变量set(USE_USER_CFG_FILE/usr/local/123.cfgCACHE FILEPATHCACHE变量FILEPATH类型)message(STATUSUSE_USER_CFG_FILE:${USE_USER_CFG_FILE})unset(USE_USER_CFG_FILE CACHE)# CACHE, INTERNAL变量set(INTERNAL_VARhello-worldCACHE INTERNALCACHE变量INTERNAL类型)message(STATUSINTERNAL_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(STATUSPATH:$ENV{PATH})message(STATUSUSERPROFILE:$ENV{USERPROFILE})message(STATUSTEMP:$ENV{TEMP})message(STATUSJAVA_HOME:$ENV{JAVA_HOME})message(STATUSCMAKE_HOME:$ENV{CMAKE_HOME})message(STATUSUSER_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})

相关新闻