Philip Lowman wrote:
> On Wed, Aug 20, 2008 at 10:54 AM, Brad King <[EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>> 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
_______________________________________________
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to