# CMakeDependentOption

Macro to provide an option dependent on other options.

This macro presents an option to the user only if a set of other conditions are true.

cmake_dependent_option

      cmake_dependent_option(<option> "<help_text>" <value> <depends> <force>)

  Makes `<option>` available to the user if the semicolon-separated list of conditions in `<depends>` are all true. Otherwise, a local variable named `<option>` is set to `<force>`.

  When `<option>` is available, the given `<help_text>` and initial `<value>` are used. Otherwise, any value set by the user is preserved for when `<depends>` is satisfied in the future.

  Note that the `<option>` variable only has a value which satisfies the `<depends>` condition within the scope of the caller because it is a local variable.

Added in version 3.22: Full Condition Syntax is now supported. See policy `CMP0127`.

## Examples

Semicolon-separated list of conditions:

    cmake_dependent_option(USE_FOO "Use Foo" ON "USE_BAR;NOT USE_ZOT" OFF)

If `USE_BAR` is true and `USE_ZOT` is false, this provides an option called `USE_FOO` that defaults to ON. Otherwise, it sets `USE_FOO` to OFF and hides the option from the user. If the status of `USE_BAR` or `USE_ZOT` ever changes, any value for the `USE_FOO` option is saved so that when the option is re-enabled it retains its old value.

Full condition syntax:

    cmake_dependent_option(USE_FOO "Use Foo" ON "USE_A AND (USE_B OR USE_C)" OFF)

Similar to the previous example, if the argument with full condition syntax evaluates to true, this provides an option called `USE_FOO` that defaults to ON. Otherwise, it sets `USE_FOO` to OFF and hides the option from the user in the GUI. When condition changes, option is saved in similar way as described above. This enables using entire condition syntax as being the `if` clause argument, such as grouping conditions with parens and similar.