如何在 cmake 中传递一个包含一个空元素的列表?
How to pass a list with one empty element in cmake?
我有一个 cmake 函数,它需要一个列表作为它的参数之一。在 cmake 中,列表由字符串表示,列表元素由分号分隔。我可以将空列表作为 ""
传递,将一个元素的列表作为 "foo"
传递,将多个元素的列表作为 "foo1;foo2;foo3"
传递。即使将两个空元素的列表作为 ";"
传递也能按预期工作。但是如何传递一个只有一个空元素的列表?
我用谷歌搜索了一下,发现了这个 post:
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`
如您所见,有一个参数为零的情况和一个参数为空的情况。
我有一个 cmake 函数,它需要一个列表作为它的参数之一。在 cmake 中,列表由字符串表示,列表元素由分号分隔。我可以将空列表作为 ""
传递,将一个元素的列表作为 "foo"
传递,将多个元素的列表作为 "foo1;foo2;foo3"
传递。即使将两个空元素的列表作为 ";"
传递也能按预期工作。但是如何传递一个只有一个空元素的列表?
我用谷歌搜索了一下,发现了这个 post:
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`
如您所见,有一个参数为零的情况和一个参数为空的情况。