[CMake] ARGC != list(LENGTH ARGV) and ARGV0 != list(GET ARGV 0)
Rolf Eike Beer
eike at sf-mail.de
Fri Oct 11 03:06:03 EDT 2013
Am Freitag, 11. Oktober 2013, 14:49:18 schrieb Clark WANG:
> On Fri, Oct 11, 2013 at 2:20 PM, Rolf Eike Beer <eike at sf-mail.de> wrote:
> > Am Freitag, 11. Oktober 2013, 12:07:58 schrieb Clark WANG:
> > > See following example:
> > > $ cmake --version
> > > cmake version 2.8.11.2
> > > $ cat CMakeLists.txt
> > > cmake_minimum_required(VERSION 2.8)
> > >
> > > FUNCTION(foo)
> > >
> > > list(LENGTH ARGV argc)
> > > message("ARGC=${ARGC} list(LENGTH ARGV)=${argc}")
> > >
> > > list(GET ARGV 0 argv0)
> > > message("ARGV0=${ARGV0} list(GET ARGV 0)=${argv0}")
> > >
> > > ENDFUNCTION()
> > >
> > > foo("a;b;c")
> > > $ cmake .
> > > ARGC=1 list(LENGTH ARGV)=3
> > > ARGV0=a;b;c list(GET ARGV 0)=a
> > > -- Configuring done
> > > -- Generating done
> > > -- Build files have been written to: /root/tmp
> > > $
> > >
> > > I know ';' is special in cmake but it's counter-intuitive that ARGC !=
> > > list(LENGTH ARGV). Is this a bug?
> >
> > CMake will not expand a string into a list when passed as arguments. It
> > would
> >
> > do when using a variable:
> > set(foovar "a;b;c")
> > foo(${foovar})
>
> It's not quite about using a variable or not. For your example,
> foo("${foovar}") would give the same result as mine.
Yes, of course. And that's basically the whole point: by the quotes you tell
CMake to interpret the stuff as string at this point.
foo(a;b;c)
should give your expected result, too.
Eike
--
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://www.cmake.org/pipermail/cmake/attachments/20131011/3cfc9cf8/attachment.pgp>
More information about the CMake
mailing list