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

标签 list cmake representation

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

我用谷歌搜索了一下,发现了这篇文章:

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

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

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

最佳答案

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

正如你所看到的,有一个零参数的情况和一个空参数的情况。

关于list - 如何在cmake中传递一个包含一个空元素的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31455392/

相关文章:

c++ - 我可以在带有 Cmake 2.8.12.2 的 ubuntu 14.04 上为 C++ 使用 biicode 吗?

c++ - 如何在 CLion 中创建、编译和运行单个文件

c++ - 如何在解决方案资源管理器中保留源文件夹层次结构?

python - 将列表输出为列

list - Sencha Touch 2 列表背景改变

python - 根据子列表中项目的顺序将列表列表转换为字典列表

python - 计算字符串python中的字母

python - PYAML 抛出表示错误

python - 数据表示

python-3.x - Python 字节表示