Functions

函数体内部, 是一个独立的作用域, 里面定义的变量, 只在函数体内有效.

function(factorial n)
    set(product 1)
    foreach(i RANGE 1 ${n})
        math(EXPR product "${product} * ${i}")
    endforeach()
    message("${n}! = ${product}")
endfunction()

factorial(10)

函数返回值

函数本身不支持返回值, 但可以使用 set() 命令来强制修改调用处的变量名:

function(accumulate x y sum)
  math(EXPR s "${x} + ${y}")
  set(${sum} ${s}  PARENT_SCOPE)
endfunction()

set(result 0)
accumulate(3 4 result)

这里在调用时, 不要传入 ${result}, 这样会将 result 变量展开, 传入的值是 "0". 我们要传入变量名本身.