[CMake] unset() command

Philip Lowman philip at yhbt.com
Thu Aug 21 09:31:36 EDT 2008


On Thu, Aug 21, 2008 at 9:01 AM, Brad King <brad.king at kitware.com> wrote:

> 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.


That makes sense.  Would you like me to fix the patch and resubmit?

-- 
Philip Lowman
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20080821/3e1e430c/attachment-0001.htm>


More information about the CMake mailing list