block — CMake 4.0.1 Documentation (original) (raw)
Added in version 3.25.
Evaluate a group of commands with a dedicated variable and/or policy scope.
block([SCOPE_FOR [POLICIES] [VARIABLES]] [PROPAGATE ...]) 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, 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 tocmake_policy(PUSH) with an automaticcmake_policy(POP) when leaving the block scope.
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 the block() command, this option sets or unsets the specified variables in the parent scope. This is equivalent to set(PARENT_SCOPE) or unset(PARENT_SCOPE)commands.
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 foreach() or while()command, the break() and continue() commands can be used inside the block.
while(TRUE) block() ... # the break() command will terminate the while() command break() endblock() endwhile()