首页 > 解决方案 > 如何将空元素添加到 CMake 列表?

问题描述

有 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

我找到了一种解决方法,但它看起来像一个kludge:

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()

标签: cmake

解决方案


它似乎不适用于空列表,但是如果您使用一些虚拟值初始化列表,就像您在第二个示例中所做的那样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

推荐阅读