cmake进阶:定义函数的使用方法

一.  简介

前面已经将 cmake 中常用的命令 command、变量 variable 都给大家进行了详细介绍,通过前面的学习,相信大家已经掌握了 cmake 工具的基本使用方法;
接下来我们再进一步学习 cmake,本文开始学习 cmake中定义函数。

 

二.   cmake进阶:定义函数的使用方法

1.  基本使用方法

在 cmake 中我们也可以定义函数,cmake 提供了 function()命令用于定义一个函数,使用方法如下所示:

function(<name> [arg1 [arg2 [arg3 ...]]])
 command1(args ...)
 command2(args ...)
 ...
endfunction(<name>)
endfunction 括号中的<name>可写可不写,如果写了,就必须和 function 括号中的<name>一致。

第一个参数 name 表示函数的名字,arg1、arg2…表示传递给函数的参数。调用函数的方法其实就跟使用命令一样,一个简单地示例如下所示:
# function 函数测试
# 函数名: xyz
function(xyz arg1 arg2)
 message("${arg1} ${arg2}")
endfunction()

# 调用函数
xyz(Hello World)

进入 build目录下,运行 "cmake .." 命令后如下:

2.  使用 return()命令

在 function()函数中也可以使用 C 语言中的 return 语句退出函数,如下所示:

# function 函数测试
# 函数名: xyz
function(xyz)
 message(Hello)
 return() # 退出函数
 message(World)
endfunction()

# 调用函数
xyz()

进入 build目录下,运行 "cmake .." 命令后如下:

可以看出,只打印了 Hello,并没有打印 World,说明 return()命令是生效的,执行 return()命令之后就已经退出当前 函数了,所以并不会打印 World。
但是需要注意的是,return 并不可以用于返回参数,那函数中如何返回参数给调用者呢?
关于这个问题,后续再给大家讲解,因为这里涉及到其它一些问题,本小节暂时先不去理会这个问题。

 

3.  可变参函数

cmake 中,调用函数时实际传入的参数个数不需要等于函数定义的参数个数(甚至函数定义时,参数个数为 0 ),但是实际传入的参数个数必须大于或等于函数定义的参数个数。
如下所示:
# function 函数测试
# 函数名: xyz
function(xyz arg1)
 message(${arg1})
endfunction()

# 调用函数
xyz(Hello World China)

函数 xyz 定义时只有一个参数,但是实际调用时我们传入了 3 个参数,注意这并不会报错,是符合 function() 语法规则的,会正常执行,打印信息如下:

从打印信息可知, message() 命令打印出了调用者传入的第一个参数,也就是 Hello
这种设计有什么用途呢?
正如我们的标题所言,这种设计可用于实现可变参函数(与 C 语言中的可变 参数函数概念相同);

但是有个问题,就如上例中所示,用户传入了 3 个参数,但是函数定义时并没有定义这些形参,函数中如何引用到第二个参数 World 以及第三个参数 China 呢?

其实 cmake 早就为大家考虑到了,并给出了相应的解决方案,就是接下来向大家介绍的内部变量。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值