block¶
New in version 3.25.
Evaluate a group of commands with a dedicated variable and/or policy scope.
block([SCOPE_FOR (POLICIES|VARIABLES)] [PROPAGATE <var-name>...])
<commands>
endblock()
All commands between block()
and the matching endblock()
are
recorded without being invoked. Once the endblock()
is evaluated, the
recorded list of commands is invoked inside the requested scopes, and, finally,
the scopes created by block()
command are removed.
SCOPE_FOR
Specify which scopes must be created.
POLICIES
Create a new policy scope. This is equivalent to
cmake_policy(PUSH)
.VARIABLES
Create a new variable scope.
If
SCOPE_FOR
is not specified, this is equivalent to:block(SCOPE_FOR VARIABLES POLICIES)
PROPAGATE
When a variable scope is created by
block()
command, this option set or unset the specified variables in the parent scope. This is equivalent toset(PARENT_SCOPE)
orunset(PARENT_SCOPE)
commands.set(VAR1 "INIT1") set(VAR2 "INIT2") block(PROPAGATE VAR1 VAR2) set(VAR1 "VALUE1") unset(VAR2) endblock() # here, VAR1 holds value 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 local to a foreach()
or while()
command, the commands break()
and continue()
can be used
inside this block.
while(TRUE)
block()
...
# the break() command will terminate the while() command
break()
endblock()
endwhile()