0
点赞
收藏
分享

微信扫一扫

CMAKE变量共享

是归人不是过客 2022-05-02 阅读 47
c++

在多级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 条评论