On Monday, 14. October 2013, 19:07:06, Matthew Woehlke wrote: > > The "IN LISTS" signature of foreach seems to do additional list > > splitting, leading to ("foo;bar" "baz") appearing as 3 elements. > > Accessing the ARGV array by the positional indices (e.g. ${ARGV0}) > > prevents the splitting. > > Really? That... is surprising. I thought the whole point of 'IN LISTS' > was to take a variable that already contains a list and NOT do > additional splitting (the way 'foreach(NAME ${LIST})' would)...
While the behaviour here is hardly what one would expect, the list is not really split. What happens, is the following: 1) Function info gets two parameters: "foo;bar" and "baz" 2) The ARGV list is created by adding the parameters to the list: set(ARGV) list(ADD ARGV "foo;bar") # here the "foo;bar" list is flattened list(ADD ARGV "baz") Since a list cannot contain another list, we get a flattened representation of the arguments: ARGV == "foo;bar;baz" 3) foreach(name IN LISTS ARGV) only gets to see the flattened representation contained in ARGV. 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