代码之家  ›  专栏  ›  技术社区  ›  Alexander Klauer

如何在cmake中传递带有一个空元素的列表?

  •  5
  • Alexander Klauer  · 技术社区  · 9 年前

    我有一个cmake函数,它需要一个列表作为其参数之一。在cmake中,列表由字符串表示,列表元素用分号分隔。我可以传递一个空列表作为 "" ,一个元素的列表为 "foo" 和多个元素的列表。, "foo1;foo2;foo3" 。甚至将两个空元素的列表作为 ";" 按预期工作。但是,如何传递一个只有一个空元素的列表?

    我在网上搜索了一下,发现了这篇帖子:

    http://public.kitware.com/pipermail/cmake-developers/2013-July/007738.html

    其中包含了类似的问题,但我找不到任何后续行动。

    那么,是否有可能传递一个只有一个空元素的列表,如果有,如何传递?

    1 回复  |  直到 9 年前
        1
  •  5
  •   user2288008 user2288008    9 年前

    可以添加表示参数名称的额外参数。这是CMake中广泛使用的模式:

    # usage: foo(FOO arg0 arg1 arg2 ...)
    
    function(foo)
      list(LENGTH ARGV x)
      # check first is FOO here
      math(EXPR argn "${x} - 1")
    
      if(argn EQUAL 0)
        message("argn: 0 |")
        return()
      endif()
    
      set(output)
      foreach(index RANGE 1 ${argn})
        list(GET ARGV ${index} current)
        set(output "${output} `${current}`")
      endforeach()
    
      message("argn: ${argn} | argv:${output}")
    endfunction()
    
    foo(FOO)
    foo(FOO "")
    foo(FOO "1")
    foo(FOO "1" "")
    foo(FOO "1" "abc")
    

    结果:

    argn: 0 |
    argn: 1 | argv: ``
    argn: 1 | argv: `1`
    argn: 2 | argv: `1` ``
    argn: 2 | argv: `1` `abc`
    

    如您所见,有一种情况是零参数,而有一种是空参数。