Stumbled on this question, and thought I added an update.
As explained here, the option
command does not create a CACHE variable if a normal variable with the same name exists. This behavior was introduced in version 3.13 (where it is the default). On the other hand, setting a CACHE variable named FOO
when FOO
exists as a normal variable, will yield two copies of FOO, a normal variable and a CACHE one.
Therefore, whether to use option(FOO "" ON)
or set(FOO ON CACHE BOOL "")
may also depend on what you want your configuration system to do when a variable with the same name has already been defined upstream.
Note: the two still behave the same way if FOO has been defined upstream in the cache. The difference is only if the upstream is a normal variable.