[CMake] unset() command

Brad King brad.king at kitware.com
Thu Aug 21 09:01:08 EDT 2008


Philip Lowman wrote:
> On Wed, Aug 20, 2008 at 10:54 AM, Brad King <brad.king at kitware.com
> <mailto:brad.king at kitware.com>> wrote:
> 
>     The "set" command already supports unsetting:
> 
>     set(FOO xyz)
>     set(FOO) # unsets
>     if(DEFINED FOO)
>      message("This message does not appear.")
>     endif(DEFINED FOO)
> 
>     I think it should just be fixed for CACHE and ENV variables.
> 
> 
> I knew that set() supported unsetting local variables but wasn't sure it
> would be safe to extend it to CACHE and ENV variables as a bugfix. 
> Regardless of whether this is appropriate to do or not adding an unset()
> command also seemed to make the language simpler to understand because:
>    set(FOO)
> as someone else pointed out, is somewhat confusing.  Without referencing
> the documentation many programmers might think this defines a variable
> called FOO and sets it to empty but what it really is doing is
> *undefining* the variable FOO entirely if it exists.

Okay, I agree.  It will be easier and more readable to add the unset
command than to extend the "set" command to "unset" things :)

However, this:

  unset(MY_CACHE_VARIABLE)

should not remove the cache entry.  It should only unset the CMake
variable.  In order to remove the cache entry, we should require

  unset(MY_CACHE_VARIABLE CACHE)

Otherwise there is no way to remove the variable without removing the
cache entry.

One nice thing about the unset command is that it doesn't make sense to
provide a value.  Therefore we can add extra arguments like 'CACHE'
without ambiguity.

-Brad


More information about the CMake mailing list