CMake中函数参数问题

CMake中function函数的定义:

function(<name> [arg1 [arg2 [arg3 ...]]])
  COMMAND1(ARGS ...)            # 命令语句
  COMMAND2(ARGS ...)
  ...
function()

系统为我们提供了一些特殊的变量:

变量说明
argv##是一个下标,0指向第一个参数,累加
argv所有的定义时要求传入的参数
argn定义时要求传入的参数以外的参数
argc传入的实际参数的个数,也就是调用函数是传入的参数个数

函数就是使用变量,在命令中途可以对改变量进行修改

例一:

cmake_minimum_required(VERSION 3.5)

set(var "ABC")

function(Foo arg)
  message("arg = ${arg}")
  set(arg "abc")
  message("# After change the value of arg.")
  message("arg = ${arg}")
endfunction()
message("=== Call function ===")
Foo(${var})

message("outer arg = ${arg}")
message("var = ${var}")

运行结果:

=== Call function ===
arg = ABC
# After change the value of arg.
arg = abc
outer arg = 
var = ABC

例二:

cmake_minimum_required(VERSION 3.5)

set(var "ABC")

function(Foo arg)
  message("arg = ${arg}")
  set(arg "abc")
  message("# After change the value of arg.")
  message("arg = ${arg}")
endfunction()
message("=== Call function ===")
Foo(var)

message("outer arg = ${arg}")
message("var = ${var}")

运行结果:

=== Call function ===
arg = var
# After change the value of arg.
arg = abc
outer arg = 
var = ABC

例三:

cmake_minimum_required(VERSION 3.5)

set(var "ABC")

function(Foo arg)
  if (arg STREQUAL "ABC")
    message("arg1 = ${arg}")
  endif()
  if (${arg} STREQUAL "ABC")
    message("arg2 = ${arg}")
  endif()
endfunction()
message("=== Call function ===")
Foo(${var})

message("outer arg = ${arg}")
message("var = ${var}")

运行结果:

=== Call function ===
arg1 = ABC
arg2 = ABC
outer arg = 
var = ABC
  1. 对于CMake中的function函数,当调用的时候如果使用的是set出来的变量,都必须通过${}将变量的内容传递进去,而不能只写上变量名。举例:Foo(${var})
  2. CMake中的function函数,参数传递是值拷贝的方式,在命令中途可以对改变量进行修改(因为是单向值传递,仅在函数的作用域内生效,例如最后一行的message("var = ${var}")中的var值还是ABC)。
  3. CMake中的function函数可通过${}取出内容,也可以直接通过变量名取出内容。例如在函数内的
  if (arg STREQUAL "ABC")
    message("arg1 = ${arg}")
  endif()
  if (${arg} STREQUAL "ABC")
    message("arg2 = ${arg}")
  endif()

这两句是等效的。

如果把CMake中的宏和函数对比起来看的话,就会出现让人迷惑的地方,下一篇我们将CMake中的宏和函数进行对比,看看它们的差异。

参考:
【CMake】cmake中的include指令(.cmake文件/MACRO宏/function函数)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值