On Wednesday, 16. April 2014, 12:03:30, Rolf Eike Beer wrote:
> > Instead of ``"${var}" STREQUAL "VALUE"'', write:
> > 
> > IF ( var MATCHES "^VALUE$" )
> 
> NOOOOO, please don't! I try hard to kill all those as it requires
> compiling a regular expression for a simple string match. Just change it
> to something that is no valid variable name, i.e. will never get
> expanded:

In principle, you are right. Not too sure, though, whether such a big "NOOOOO" 
is warranted. A quick test shows the overhead to be existing, yet not too 
severe:

foreach(arg RANGE 10000)
    #a) if ( " ${foo}" STREQUAL " ${arg}")
    #b) if ( foo MATCHES "^${arg}$")
        message("Found it!")
    endif()
endforeach()

Method b) has to compile 10.000 regexes, yet the runtime is "only" 30% worse. 
And that is even though this example does the opposite of the normal use-case 
of the regex, i.e. keeping one fixed regex and matching the variables against 
it. I doubt that the overhead is even measurable in the "average" build 
system.

#a)
$ time cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /home/zing/scratch/foo

real    0m0.210s
user    0m0.136s
sys     0m0.012s

#b)
$ time cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /home/zing/scratch/foo

real    0m0.278s
user    0m0.220s
sys     0m0.004s

Or are you talking about memory overhead?


> 
> if (" ${arg}" STREQUAL " TOTO")

Kudos to you for presenting a (the only?) *safe* prefix.

  Johannes
-- 

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:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to