| block |
| ----- |
| |
| .. versionadded:: 3.25 |
| |
| Evaluate a group of commands with a dedicated variable and/or policy scope. |
| |
| .. code-block:: cmake |
| |
| block([SCOPE_FOR [POLICIES] [VARIABLES] ] [PROPAGATE <var-name>...]) |
| <commands> |
| endblock() |
| |
| All commands between ``block()`` and the matching :command:`endblock` are |
| recorded without being invoked. Once the :command:`endblock` is evaluated, the |
| recorded list of commands is invoked inside the requested scopes, then the |
| scopes created by the ``block()`` command are removed. |
| |
| ``SCOPE_FOR`` |
| Specify which scopes must be created. |
| |
| ``POLICIES`` |
| Create a new policy scope. This is equivalent to |
| :command:`cmake_policy(PUSH)` with an automatic |
| :command:`cmake_policy(POP)` when leaving the block scope. |
| |
| ``VARIABLES`` |
| Create a new variable scope. |
| |
| If ``SCOPE_FOR`` is not specified, this is equivalent to: |
| |
| .. code-block:: cmake |
| |
| block(SCOPE_FOR VARIABLES POLICIES) |
| |
| ``PROPAGATE`` |
| When a variable scope is created by the :command:`block` command, this |
| option sets or unsets the specified variables in the parent scope. This is |
| equivalent to :command:`set(PARENT_SCOPE)` or :command:`unset(PARENT_SCOPE)` |
| commands. |
| |
| .. code-block:: cmake |
| |
| set(var1 "INIT1") |
| set(var2 "INIT2") |
| |
| block(PROPAGATE var1 var2) |
| set(var1 "VALUE1") |
| unset(var2) |
| endblock() |
| |
| # Now var1 holds VALUE1, and var2 is unset |
| |
| This option is only allowed when a variable scope is created. An error will |
| be raised in the other cases. |
| |
| When the ``block()`` is inside a :command:`foreach` or :command:`while` |
| command, the :command:`break` and :command:`continue` commands can be used |
| inside the block. |
| |
| .. code-block:: cmake |
| |
| while(TRUE) |
| block() |
| ... |
| # the break() command will terminate the while() command |
| break() |
| endblock() |
| endwhile() |
| |
| |
| See Also |
| ^^^^^^^^ |
| |
| * :command:`endblock` |
| * :command:`return` |
| * :command:`cmake_policy` |