有CMake脚本:
unset(FOO)
list(APPEND FOO "")
list(APPEND FOO "")
list(APPEND FOO "")
list(APPEND FOO "")
list(LENGTH FOO SIZE)
message(FATAL_ERROR ${SIZE})
期望 - 4。现实 - 0
我找到了一种解决方法,但它看起来像一个笨蛋:
set(FOO "dummy")
set(FOO "${FOO};")
set(FOO "${FOO};")
set(FOO "${FOO};")
set(FOO "${FOO};")
list(REMOVE_AT FOO 0)
message(FATAL_ERROR ${SIZE})
这个例子比我的任务简单一点,所以,请不要建议写set(FOO ";;;")
:)我从外面得到元素,其中一些可能是空的。像这样:
function(do_smth LIST_WITH_EMPTY_ITEMS)
unset(RESULT)
foreach(X IN LISTS LIST_WITH_EMPTY_ITEMS)
if(${CONDITION})
list(APPEND RESULT "${X}")
endif()
endforeach()
endfunction()
它似乎不适用于空列表,但是如果您使用一些虚拟值初始化列表,就像您在第二个示例set(FOO "dummy")
中所做的那样,您可以继续将FOO
用作列表,也可以向其附加空元素。它基本上是您想要的方法和解决方法的组合:
set(FOO "dummy")
list(APPEND FOO "")
list(APPEND FOO "")
list(APPEND FOO "")
list(APPEND FOO "")
list(POP_FRONT FOO)
list(LENGTH FOO SIZE)
message("content: (${FOO})")
message("sizt: ${SIZE}")
其输出为:
content: (;;;)
size: 4