将列表转换为 cmake 函数的参数

rwo*_*ols 3 cmake

假设我们有一个 CMake 函数func,它接受命名参数,比如NAMED1NAMED2。第一个参数是强制性的,第二个是可选的。例如

func(NAMED1 foo NAMED2 optional)
Run Code Online (Sandbox Code Playgroud)

现在我有一个循环需要func在每次迭代时调用这个函数,但根据当前的迭代,我有时需要提供可选值,有时不需要。所以在每次迭代时,我都会构建一个参数列表,比如

list(APPEND args "NAMED1" "foo")
if (...something...)
    list(APPEND args "NAMED2" "optional")
endif()
Run Code Online (Sandbox Code Playgroud)

所以我args现在有了清单。作为一个字符串,它可能看起来像

NAMED1;foo
Run Code Online (Sandbox Code Playgroud)

或者它可能看起来像

NAMED1;foo;NAMED2;optional
Run Code Online (Sandbox Code Playgroud)

所以我想用字符串替换整个列表

string(REPLACE ";" " " args "${args}")
Run Code Online (Sandbox Code Playgroud)

然后结果args看起来像

NAMED1 foo NAMED2 optional
Run Code Online (Sandbox Code Playgroud)

所以我想把这个字符串传递给函数func,用

func("${args}")
Run Code Online (Sandbox Code Playgroud)

但现在的问题是 CMake 认为这是一个大字符串,而它应该将其解释为单独的字符串。我怎样才能做到这一点?

Flo*_*ian 5

把我的评论变成答案

只是func(${args})没有引号,不需要替换;应该工作。

过去我一直在使用它很多次(特别是在转发“其余参数”时${ARGN})。

参考