[CMake] set(a b); set(b c); if(a STREQUAL b OR a STREQUAL c) ...
Ruslan Baratov
ruslan_baratov at yahoo.com
Thu Sep 4 09:25:21 EDT 2014
On 04-Sep-14 16:48, Chuck Atkins wrote:
>
> Command `if(a MATCHES ...)` has the same flaw:
> `if(<variable|string> MATCHES regex)`:
> ..
> set(MYSTRING "B")
> set(A "MYSTRING")
> if("${A}" MATCHES "^MYSTRING$")
> # do *not* go here even A is MYSTRING (use *variable* MYSTRING)
> endif()
>
>
> This should work without dereferencing A, i.e.:
>
> if(A MATCHES "^MYSTRING$")
> # Bingo
> endif()
Yes, but what if you need to combine some values, like: `if("${A}-${B}"
MATCHES ...)`?
Note that `if(A MATCHES "first-part" AND B MATCHES "second-part")` is
not the solutions in some cases, for example:
if("${A}${B}" MATCHES "/home/my/dir-A/")
should work for both A,B = {"/home/", "my/dir-A/"} and {"/home/my/",
"dir-A/"}
Also you always need keep in mind that it's not a string, but a regular
expression, example:
set(A "path/to/test/project")
set(B "path/to/test.project")
message("A and B same dir?")
if(A MATCHES "^${B}$")
message("surprise")
endif()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20140904/f13b23a8/attachment.html>
More information about the CMake
mailing list