Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 如何在cmake中传递包含一个空元素的列表?_List_Cmake_Representation - Fatal编程技术网

List 如何在cmake中传递包含一个空元素的列表?

List 如何在cmake中传递包含一个空元素的列表?,list,cmake,representation,List,Cmake,Representation,我有一个cmake函数,它需要一个列表作为它的参数之一。在cmake中,列表由一个字符串表示,该字符串的列表元素之间用半线分隔。我可以将空列表传递为”,将一个元素的列表传递为“foo”,将多个元素的列表传递为,例如“foo1;foo2;foo3”。即使将包含两个空元素的列表作为“;”传递,也能正常工作。但是如何传递一个只有一个空元素的列表呢 我在谷歌上搜索了一下,发现了以下帖子: 这涵盖了一个类似的问题,但我找不到任何后续行动 那么,是否有可能传递一个只有一个空元素的列表,如果有,如何传递?您

我有一个cmake函数,它需要一个列表作为它的参数之一。在cmake中,列表由一个字符串表示,该字符串的列表元素之间用半线分隔。我可以将空列表传递为
,将一个元素的列表传递为
“foo”
,将多个元素的列表传递为,例如
“foo1;foo2;foo3”
。即使将包含两个空元素的列表作为
“;”
传递,也能正常工作。但是如何传递一个只有一个空元素的列表呢

我在谷歌上搜索了一下,发现了以下帖子:

这涵盖了一个类似的问题,但我找不到任何后续行动


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

您可以添加表示参数名称的额外参数。这是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`

正如您所看到的,有一个带有零参数的case和一个空参数的case。

空列表和带有一个空元素的列表具有相同的表示形式。如果您想区分这两者,您需要找到特定于用例的解决方案。您的用例是什么?您可能希望使用来避免手动解析参数字符串。这是一种有用的模式,但在将多个列表传递给函数的情况下不起作用。然而,在我的例子中,只有一个参数必须能够接受一个空元素的列表作为参数,所以我可以通过仅对该参数使用您的模式来实现这一点。因此,你是对的。对不起,我误解了FOO的意义。