返回¶
从文件、目录或函数返回。
return([PROPAGATE <var-name>...])
当在包含文件中遇到此命令时(通过 include() 或 find_package()),它会导致当前文件的处理停止并将控制权返回到包含文件。如果在另一个文件未包含的文件中遇到它,例如一个 CMakeLists.txt,调用由 cmake_language(DEFER) 调度的延迟调用,如果有的话,控制返回到父目录。
如果在函数中调用 return(),控制权将返回给该函数的调用者。请注意,与 function() 不同, macro() 是就地展开的,因此无法处理 return()。
策略 CMP0140 控制有关命令参数的行为。除非该策略设置为“NEW”,否则所有参数都将被忽略。
传播在 3.25 版本加入.
此选项设置或取消设置父目录或函数调用者范围中的指定变量。这等同于
set(PARENT_SCOPE)或unset(PARENT_SCOPE)命令,除了它与block()命令交互的方式,如下所述。PROPAGATE选项与block()命令结合使用非常有用。return将通过block()命令创建的任何封闭块作用域传播指定的变量。在函数内部,这确保变量被传播到函数的调用者,而不管函数中的任何块。如果不在函数内部,它确保变量传播到父文件或目录范围。例如:CMakeLists.txt¶cmake_version_required(VERSION 3.25) project(example) set(var1 "top-value") block(SCOPE_FOR VARIABLES) add_subdirectory(subDir) # var1 has the value "block-nested" endblock() # var1 has the value "top-value"
子目录/CMakeLists.txt¶function(multi_scopes result_var1 result_var2) block(SCOPE_FOR VARIABLES) # This would only propagate out of the immediate block, not to # the caller of the function. #set(${result_var1} "new-value" PARENT_SCOPE) #unset(${result_var2} PARENT_SCOPE) # This propagates the variables through the enclosing block and # out to the caller of the function. set(${result_var1} "new-value") unset(${result_var2}) return(PROPAGATE ${result_var1} ${result_var2}) endblock() endfunction() set(var1 "some-value") set(var2 "another-value") multi_scopes(var1 var2) # Now var1 will hold "new-value" and var2 will be unset block(SCOPE_FOR VARIABLES) # This return() will set var1 in the directory scope that included us # via add_subdirectory(). The surrounding block() here does not limit # propagation to the current file, but the block() in the parent # directory scope does prevent propagation going any further. set(var1 "block-nested") return(PROPAGATE var1) endblock()
也可以看看¶
块()功能()