On 2013-03-21 16:55, David Cole wrote:
I almost always do one of these for string compare to a CMake variable
value:
if("${var}" STREQUAL "some string constant")
if("${var}" STREQUAL "${some_other_variable}")
However, this is only because I am almost always certain that ${var}
does not evaluate to the name of yet another CMake variable.
If it did, I would get unintended results.
So I wouldn't say it's necessarily a best-practice. It's "close enough"
for many lines of code I've written, but a monkey-wrench could easily
be thrown at it.
Does forcing the if(VARIABLE usage rather than the if("string" usage
make things work all the time? (Now I've thought about it too hard,
and I can't remember if this works all the time or not...)
set(x "${var}")
if(x STREQUAL "some string constant")
I think this would be the only way to be 100% safe. Using a prefix (or
suffix; same different) like 'x', 'x_', etc. will work in most cases
(even better would be to use at least one non-identifier character for
the prefix), but not if you are also trying to guard against
intentionally malicious usage. (You'd be surprised what you can coerce
into being part of a CMake variable name... in fact, offhand, NUL is
about the only thing I am confident cannot be part of a CMake variable
name...)
On a related note, can we get a policy to only allow variable names that
are valid C[++] identifiers? :-)
--
Matthew
--
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers