Matthew Woehlke wrote:
Bill Hoffman wrote:
The problem is that if(something MATCHES something) works for either
strings or variable names. The way that works is by checking to see
if there is a variable defined by the string given to if. Even if
that string is in quotes, it can still be treated like a variable.
So, in this case cmake looks up "CFLAGS" and finds that there is a
variable of that name, and uses that value for the MATCHES statement.
Basically ending up with if("happyjoy" MATCHES "CFLAGS"). You can
verify this by commenting out set(CFLAGS happyjoy) so that CFLAGS does
not have a definition, then your code works.
Yes, I figured that out. Hmm... at least it's documented, if annoying.
After poking at this further, there seems to be a bug here... we've
established that 'if(CFLAGS MATCHES CFLAGS)' expands the variable on the
LHS. That being the case, then it seems - from my reading of the doc -
that 'if(CFLAGS STREQUAL CFLAGS)' should be doing likewise, i.e. both
should be false. Further, it seems that 'if(bar MATCHES "CFLAGS")' does
*not* expand bar... why?
I agree this is confusing... Perhaps there should be some new if
arguments that are always string based, and never look up variables.
What about simply inhibiting "expansion" when the LHS is quoted? (I
guess the concern would be compatibility? But given that the current
behavior seems buggy - i.e. inconsistent - already...) Since variable
names can't contain spaces (ah, they can't, right? :-) ), it seems
reasonable that if you are trying to dereference a variable that is
supposed to contain the name of another variable, whose value you want
to use, that this seems to make sense.
OTOH, given that '${${bar}}' is a legal construct that does exactly what
you'd expect (namely, expand the variable whose name is the expansion of
bar), I'm inclined to question using implicit expansion at all. But...
it can be convenient, so maybe that would be too much. Inhibiting
"expansion" in quoted-strings seems reasonable, though. (After all,
who's putting things that are supposed to be variable names in quotes?)
ping?
--
Matthew
Please do not quote my e-mail address unobfuscated in message bodies.
--
Microsoft, electricity, network connectivity. For a secure system pick
any two. -- Iain D Broadfoot (paraphrased, from cluefire.net)
_______________________________________________
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake