function()命令用于创建一个函数,一旦创建,后续可以当做独立的命令使用。
命令格式
function(<name> [<arg1> ...])
<commands>
endfunction()
-
name
函数名称,可以通过函数名(参数)形式对函数进行调用。
-
[<arg1> ...]
函数参数。
-
<commands>
函数内部的语句或命令,在函数定义的时候只会被记录而不会执行,当函数被调用时才执行。
endfunction()也有一个可选的参数,就是函数名称,如果使用的话必须要与function()中定义的名称完全一致,默认会自动填写。
当定义一个函数时,也会创建一个范围,function内创建的普通变量范围默认仅限于该fcuntion,也可以使用set(var PARENT_SCOPE)将创建的变量传递到调用者的范围。
使用命令
-
定义一个简单的函数
# CMakeLists.txt cmake_minimum_required(VERSION 3.22) project(function_test) # 定义一个函数,接受2个入参,并将入参打印出来 function(print var1 var2) message("-- Hello: [${var1}] and [${var2}]") endfunction() print("function" "test")
执行
cmake .
后的结果:-- Hello: [function] and [test]
-
在定义的函数内使用上层定义的变量
# CMakeLists.txt cmake_minimum_required(VERSION 3.22) project(function_test) set(VAR1_IN_PARENT_SCOPE "parent var1") # 定义一个函数,接受2个入参,并将入参打印出来 function(print var1 var2) message("-- Hello: [${var1}] and [${var2}]") message("-- show parent var: ${VAR2_IN_PARENT_SCOPE}") endfunction() print("function test" "first time") set(VAR2_IN_PARENT_SCOPE "parent var2") print("function test" "sencond time")
执行
cmake .
后的结果:-- Hello: [function test] and [first time] -- show parent var: -- Hello: [function test] and [sencond time] -- show parent var: parent var2
说明只要在调用fcuntion的时,外部变量有定义,那么function内部就能访问。
-
在函数内部创建一个变量
cmake_minimum_required(VERSION 3.22) project(function_test) set(VAR1_IN_PARENT_SCOPE "parent var1") # 定义一个函数,接受2个入参,并将入参打印出来 function(print var1 var2) message("-- Hello: [${var1}] and [${var2}]") message("-- show parent var: ${VAR2_IN_PARENT_SCOPE}") set(VAR_DEFINED_IN_FUNCTION "function var") endfunction() message("before invoke, show var from function: [${VAR_DEFINED_IN_FUNCTION}]") print("function test" "first time") message("first invoke, show var from function: [${VAR_DEFINED_IN_FUNCTION}]") set(VAR2_IN_PARENT_SCOPE "parent var2") print("function test" "sencond time") message("second invoke, show var from function: [${VAR_DEFINED_IN_FUNCTION}]")
执行
cmake .
后的结果:before invoke, show var from function: [] -- Hello: [function test] and [first time] -- show parent var: first invoke, show var from function: [] -- Hello: [function test] and [sencond time] -- show parent var: parent var2 second invoke, show var from function: []
说明:function内部创建的普通变量,只能在function内部使用。
-
在函数内部创建一个变量,并使用PARENT_SCOPE
cmake_minimum_required(VERSION 3.22) project(function_test) set(VAR1_IN_PARENT_SCOPE "parent var1") # 定义一个函数,接受2个入参,并将入参打印出来 function(print var1 var2) message("-- Hello: [${var1}] and [${var2}]") message("-- show parent var: ${VAR2_IN_PARENT_SCOPE}") set(VAR_DEFINED_IN_FUNCTION "function var" PARENT_SCOPE) endfunction() message("before invoke, show var from function: [${VAR_DEFINED_IN_FUNCTION}]") print("function test" "first time") message("first invoke, show var from function: [${VAR_DEFINED_IN_FUNCTION}]") set(VAR2_IN_PARENT_SCOPE "parent var2") print("function test" "sencond time") message("second invoke, show var from function: [${VAR_DEFINED_IN_FUNCTION}]")
执行
cmake .
后的结果:before invoke, show var from function: [] -- Hello: [function test] and [first time] -- show parent var: first invoke, show var from function: [function var] -- Hello: [function test] and [sencond time] -- show parent var: parent var2 second invoke, show var from function: [function var]
说明:function内部创建的普通变量使用PARENT_SCOPE选项,变量可以传递到function调用层范围,在function首次调用时创建。
网友评论