[cmake-developers] unset and cache variables

James Touton bekenn at gmail.com
Fri Aug 17 13:55:17 EDT 2018


The issue with unset(BLAH CACHE) is that it removes the cache entry.  I
want to make BLAH undefined in the current scope, without impacting other
scopes.

Re: lookup, thanks; I get that now.

On Fri, Aug 17, 2018 at 5:22 AM, Robert Maynard <robert.maynard at kitware.com>
wrote:

> >  I can never actually make it become undefined
>
> You can, you are missing unset(BLAH CACHE) to tell CMake you want to
> undefine the CACHE varibles
>
> > I had been operating under the assumption that there was only one active
> lookup scope
>
> Nope CMake lookup is local scope, and than cache. That is how CMake
> supports CACHE and local variables with the same name. The rules of
> variable lookup are outlined at
> https://cmake.org/cmake/help/latest/manual/cmake-language.7.html#variables
> On Thu, Aug 16, 2018 at 6:00 PM James Touton <bekenn at gmail.com> wrote:
> >
> > Fair enough, but I think that makes the command substantially less
> useful.  It means that I need to use set(BLAH "") if I want to empty a
> variable of its contents, and I can never actually make it become
> undefined, counter to the claim in the documentation:
> >
> > set(BLAH blah CACHE INTERNAL "")
> > unset(BLAH)
> > if(DEFINED BLAH)
> >     message("here") # this message gets printed!
> > endif()
> >
> > I am now effectively subject to sabotage from above.
> >
> > I had been operating under the assumption that there was only one active
> lookup scope, constructed from the previous lookup scope and any new
> sets/unsets at the current level.  I therefore expected that if a variable
> were removed from "the" current scope, it would be inaccessible.
> >
> > On Thu, Aug 16, 2018 at 2:46 PM, Robert Maynard <
> robert.maynard at kitware.com> wrote:
> >>
> >> Looking at the current docs (
> >> https://cmake.org/cmake/help/v3.12/command/unset.html ) I think the
> >> first paragraph needs to be read as a single statement to understand
> >> the behavior.
> >>
> >> "Removes the specified variable causing it to become undefined. If
> >> CACHE is present then the variable is removed from the cache instead
> >> of the current scope."
> >>
> >> I think we can be more explicit by rephrasing as:
> >>
> >> "Makes the local variable variable from the current scope be
> >> undefined, If CACHE is present then instead the cache variable is
> >> undefined."
> >> On Thu, Aug 16, 2018 at 5:38 PM James Touton <bekenn at gmail.com> wrote:
> >> >
> >> > I just recently came across this:
> >> >
> >> > set(BLAH blah CACHE INTERNAL "")
> >> > unset(BLAH)
> >> > message("BLAH: ${BLAH}")
> >> >
> >> > Surprisingly (to me), this prints out "blah".  I had expected the
> unset command to make the cached value inaccessible.  The documentation
> just states that the function "[r]emoves the specified variable causing it
> to become undefined."  Is this a bug?  I would prefer for the function to
> guarantee that ${BLAH} comes up empty.
> >> > --
> >> >
> >> > Powered by www.kitware.com
> >> >
> >> > Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
> >> >
> >> > Kitware offers various services to support the CMake community. For
> more information on each offering, please visit:
> >> >
> >> > CMake Support: http://cmake.org/cmake/help/support.html
> >> > CMake Consulting: http://cmake.org/cmake/help/consulting.html
> >> > CMake Training Courses: http://cmake.org/cmake/help/training.html
> >> >
> >> > Visit other Kitware open-source projects at http://www.kitware.com/
> opensource/opensource.html
> >> >
> >> > Follow this link to subscribe/unsubscribe:
> >> > https://cmake.org/mailman/listinfo/cmake-developers
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake-developers/attachments/20180817/c45ae13d/attachment.html>


More information about the cmake-developers mailing list