5. cmake(cache)

目录

1. 目录结构

 2. 相关语法

2.1 通过FORCE修改缓存变量

2.2  父目录与子目录之间变量的关系

2.3 使用optional替代BOOL类型的cache变量

2.4 覆盖策略

2.5  通过命令行-D传递缓存变量

3. 代码段


1. 目录结构

sub1中CMakeLists.txt的内容如下:

cmake_minimum_required(VERSION 3.21)
project(sub1)

#测试:子目录可以获取父目录中定义的普通变量
message("var_main in sub1 = ${var_main}")

#测试:父目录不能获取子目录中定义的普通变量
set(var_sub1 "var_sub1")

#测试:父级目录可以获取子目录中的cache变量
set(var_cache_sub1 "var cache sub1" CACHE STRING "cache sub1 docstring")

sub2中CMakeLists.txt的内容如下: 

cmake_minimum_required(VERSION 3.21)
project(sub2)

#测试:子目录可以获取父目录中定义的普通变量
message("var_main in sub2 = ${var_main}")

#测试:父目录不能获取子目录中定义的普通变量
set(var_sub2 "var_sub2")

#测试:父级目录可以获取子目录中的cache变量
set(var_cache_sub2 "var cache sub2" CACHE STRING "cache sub2 docstring")

 2. 相关语法

2.1 通过FORCE修改缓存变量

#cache: 缓存变量,会缓存起来,全局性质
#普通变量的作用域在于自身和子模块
#主要类型:BOOL FILEPATH PATH STRING INTERNAL(不会开放给用户) 
#docstring:鼠标提示说明
#FORCE:强制修改缓存变量

#set(变量名 变量值 CACHE 变量类型 鼠标提示说明)
set(cache_var1 "cache_var1" CACHE STRING "cache docstring")
message("cache_var1 = ${cache_var1}")
#一般修改无法修改cache变量
set(cache_var1 "cache_var2" CACHE STRING "cache docstring")
message("cache_var1 = ${cache_var1}")
#强制修改缓存变量FORCE
set(cache_var1 "cache_force" CACHE STRING "cache docstring" FORCE)
message("cache_var1 = ${cache_var1}")

 

2.2  父目录与子目录之间变量的关系

#子目录可以获取父目录中定义的普通变量
set(var_main "var main")
add_subdirectory(sub1)
add_subdirectory(sub2)

#父目录不能获取子目录中定义的普通变量
message("var_sub1 in main = ${var_sub1}")
message("var_sub2 in main = ${var_sub2}")

#父级目录可以获取子目录中的cache变量
message("var_cache_sub1 in main = ${var_cache_sub1}")
message("var_cache_sub2 in main = ${var_cache_sub2}")

 

2.3 使用optional替代BOOL类型的cache变量

#set(var_cache_bool TRUE CACHE BOOL "var cache bool") 等同于下面的语句
option(var_cache_bool "var cache bool" ON)
message("var_cache_bool = ${var_cache_bool}")

 

2.4 覆盖策略

#CMP0126(3.21版本才支持)
#cmake_policy(SET CMP0126 NEW) NEW不会删除同名普通变量,OLD会删除普通变量
#$CACHE(var_)直接查找缓存变量
set(var_ "var normal")
cmake_policy(SET CMP0126 OLD) #默认是new
set(var_ "var cache" CACHE STRING "var docstring")
message("var_ = ${var_}")
message("var_ = $CACHE{var_}")

 

2.5  通过命令行-D传递缓存变量

camke -S . -B out -D PARA1=para1_value

3. 代码段

CSDN/cmake/5.cache at main · kdvictor/CSDN · GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值