cmake进阶:变量的作用域说明一(从函数作用域方面)

一.  简介

如同 C 语言一样,在 cmake 中,变量也有作用域的概念,本文我们就来聊一聊关于 cmake 中变量作用域的问题。

接下来从三个方面进行介绍:函数作用域、目录作用域以及全局作用域。

二.  函数作用域

我把这个作用域叫做函数作用域。
当在函数内通过 set 将变量 var 与当前函数作用域绑定时,变量 var 仅在函数作用域内有效,出了这个作用域,如果这个作用域外也有同名的变量 var ,那么使用的将是域外同 名变量 var
func1() 内部调用 func2() ,嵌套调用的函数 func2() 内部如果也 引用变量 var ,那么该变量 var
该是 func1() 内部定义的变量,如果有的话;
如果 func1() 内部没有绑定变量 var ,那么就会使用 func1() 作用 域外定义的变量 var ,依次向外搜索。
以上这段话大家可能不好理解,我们通过几个示例来看看函数作用域。

三.  cmake进阶:变量的作用域

1. 函数内部引用函数外部定义的变量

准备一个cmake工程,向顶层 CMakeLists.txt添加如下代码:
# 函数 xyz
function(xyz)
 message(${ABC}) #引用变量 ABC
endfunction()

set(ABC "Hello World") #定义变量 ABC

xyz() # 调用函数

ABC 是函数外部定义的一个变量,在函数 xyz 中引用了该变量。
进入 build目录下,运行"cmake .."命令后打印信息如下:

所以可知,函数内可以引用函数外部定义的变量。

2.  函数内定义的变量是否可以被外部引用

向顶层 CMakeLists.txt添加如下代码:

# 函数 xyz
function(xyz)
 set(ABC "Hello World")#定义变量 ABC
endfunction()

xyz() # 调用函数

if(DEFINED ABC)
 message("true")
 message("${ABC}") #引用函数内定义的变量 ABC
else()
 message("false")
endif()

函数内定义了变量 ABC ,外部调用函数之后,通过 if(DEFINED ABC) 来判断变量 ABC 是否有定义,如果定义了该变量打印 true 并将变量打印出来,如果没有定义该变量则打印 false
进入 build目录下,运行"cmake .."命令后打印信息如下:
所以可知,函数内部定义的变量仅在函数内部可使用,出了函数之后便无效了。
这其实跟 C 语言中差 不多,函数中定义的变量可以认为是局部变量,外部自然是无法去引用的。

下一篇继续从函数作用域方面,学习变量的作用域。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值