[CMake] ARGC != list(LENGTH ARGV) and ARGV0 != list(GET ARGV 0)

Rolf Eike Beer eike at sf-mail.de
Fri Oct 11 02:20:14 EDT 2013


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})

ARGC=3 list(LENGTH ARGV)=3
ARGV0=a list(GET ARGV 0)=a

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/80558a75/attachment.pgp>


More information about the CMake mailing list