[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