[CMake] string regexp replace removes the semicolons

CHEVRIER, Marc marc.chevrier at sap.com
Fri Jan 22 07:06:45 EST 2016


Hi,

Command file(GLOB) returns a CMake list (in a CMake list, items are separated by ;)

Now you pass to command string the content of the list, so the list is expanded: in your example,
string(REGEX REPLACE "foo.*cc" " " COMPILE_ONLY ${ALL_SOURCES})

Is equivalent to:
string(REGEX REPLACE "foo.*cc" " " COMPILE_ONLY a.cc b.cc foo_u.cc foo_v.cc c.cc y.cc)

So, command string will concatenate all the input strings in a single string.

To keep semi colons, you have to pass ALL_SOURCES as a string, not a list:
string(REGEX REPLACE "foo.*cc" " " COMPILE_ONLY “${ALL_SOURCES}")






On 22/01/16 12:29, "CMake on behalf of Vania Joloboff" <cmake-bounces at cmake.org on behalf of vania.joloboff at inria.fr> wrote:

>Hi
>
>I want to remove from a list of sources those that start with 'foo'
>So I have
>
>file(GLOB ALL_SOURCES "*.cc")
># this gives ALL_SOURCES = "a.cc;b.cc;foo_u.cc;foo_v.cc;c.cc;y.cc"
># separated by semicolons
>
>string(REGEX REPLACE "foo.*cc" " " COMPILE_ONLY ${ALL_SOURCES})
>
>But in the COMPILE_ONLY variable the semicolons are removed !
>and then
>add_library(lib ${COMPILE_ONLY}) fails
>
>why is it removing the semicolons ?
>Vania
>
>-- 
>
>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://public.kitware.com/mailman/listinfo/cmake


More information about the CMake mailing list