Not with groups exactly. I’d structure the code this way:
set(PROJECT_VARIANT "<DEFAULT>"
CACHE STRING "Project variant")
set_property(CACHE PROJECT_VARIANT
PROPERTY STRINGS "<DEFAULT>;VARIANT1;VARIANT2;NONE")
# Defaults for each option.
set(option1_default ON)
set(option2_default OFF)
# Select a default variant. Do this in case the default changes
# in the future, old build trees automatically get it too.
if (PROJECT_VARIANT STREQUAL "<DEFAULT>")
set(PROJECT_VARIANT "VARIANT1")
endif ()
if (PROJECT_VARIANT STREQUAL "VARIANT1")
set(option1_default OFF) # VARIANT1 doesn't want this option
endif ()
option(OPTION1 "docstring" "${option1_default}")