CMAKE变量共享

在多级cmake目录里,父级的set变量是可以在子cmake里获取的,但是如果是同级的就无法获取。最近在写cmake时,子目录生成链接库后,同级的目录添加连接库后,还要添加链接库头文件位置,虽然可以直接给路径,但是当时在想链接库的cmake能不能设置自己的库路径,然后供其他cmake使用,所以就查找到了cmake变量共享。

cmake变量共享有三种方式。

set缓存变量

set可以设置缓存变量,存在在cmakecache里的变量就可以被其他的cmake访问。

语法格式:

set(<variable> <value>... CACHE <type> <docstring> [FORCE])
  • variable:变量名称
  • value:变量值列表
  • CACHE:cache变量的标志
  • type:变量类型,取决于变量的值。类型分为:BOOL、FILEPATH、PATH、STRING、INTERNAL
  • docstring:必须是字符串,作为变量概要说明
  • FORCE:强制选项,强制修改变量值

缓存变量相当于全局变量,

示例

set(LIB_INCLUDE ${PROJECT_SOURCE_DIR} CACHE PATH "lib include path" FORCE)

set向上传递变量

set在设置变量的时候最后带上PARENT_SCOPE可以向上传递变量,传递到父作用域,那在父作用域下的字cmake就可以获取到。

示例

set(LIB_INCLUDE ${PROJECT_SOURCE_DIR} PARENT_SCOPE)

set_property/get_property

用set_property来设置变量,设置后的变量可以用get_property来获取并且存到一个新的变量中。

设置变量

set_property(GLOBAL PROPERTY LIB_INCLUDE_DIR ${PROJECT_SOURCE_DIR})

获取变量

get_property(MYLIB_INCLUDE_DIR GLOBAL PROPERTY "LIB_INCLUDE_DIR")
message(${MYLIB_INCLUDE_DIR})

上面获取变量LIB_INCLUDE_DIR并且存到MYLIB_INCLUDE_DIR中。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值