| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | 
							- return
 
- ------
 
- Return from a file, directory or function.
 
- .. code-block:: cmake
 
-   return([PROPAGATE <var-name>...])
 
- When this command is encountered in an included file (via :command:`include` or
 
- :command:`find_package`), it causes processing of the current file to stop
 
- and control is returned to the including file.  If it is encountered in a
 
- file which is not included by another file, e.g. a ``CMakeLists.txt``,
 
- deferred calls scheduled by :command:`cmake_language(DEFER)` are invoked and
 
- control is returned to the parent directory if there is one.
 
- If ``return()`` is called in a function, control is returned to the caller
 
- of that function.  Note that a :command:`macro`, unlike a :command:`function`,
 
- is expanded in place and therefore cannot handle ``return()``.
 
- Policy :policy:`CMP0140` controls the behavior regarding the arguments of the
 
- command.  All arguments are ignored unless that policy is set to ``NEW``.
 
- ``PROPAGATE``
 
-   .. versionadded:: 3.25
 
-   This option sets or unsets the specified variables in the parent directory or
 
-   function caller scope. This is equivalent to :command:`set(PARENT_SCOPE)` or
 
-   :command:`unset(PARENT_SCOPE)` commands, except for the way it interacts
 
-   with the :command:`block` command, as described below.
 
-   The ``PROPAGATE`` option can be very useful in conjunction with the
 
-   :command:`block` command.  A ``return`` will propagate the
 
-   specified variables through any enclosing block scopes created by the
 
-   :command:`block` commands.  Inside a function, this ensures the variables
 
-   are propagated to the function's caller, regardless of any blocks within
 
-   the function.  If not inside a function, it ensures the variables are
 
-   propagated to the parent file or directory scope. For example:
 
-   .. code-block:: cmake
 
-     :caption: CMakeLists.txt
 
-     cmake_minimum_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"
 
-   .. code-block:: cmake
 
-     :caption: subDir/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()
 
- See Also
 
- ^^^^^^^^
 
- * :command:`block`
 
- * :command:`function`
 
 
  |