Macros

类似于 C 语言中的宏, 就是用于代码展开. 不会创建新的作用域, 是在当前作用域展示并执行的.

可以用宏来定义有返回值的操作, 其它情况下, 都应该定义成函数.

macro(FACTORIAL n)
    set(FACTORIAL_PRODUCT 1)
    foreach(i RANGE 1 ${n})
        math(EXPR FACTORIAL_PRODUCT "${FACTORIAL_PRODUCT} * ${i}")
    endforeach()
endmacro()
FACTORIAL(10)
message("10! = ${FACTORIAL_PRODUCT}")