提问人:einpoklum 提问时间:3/25/2023 更新时间:3/25/2023 访问量:342
在 CMake 条件下使用 IN_LIST 时,获取“指定的未知参数”
When using IN_LIST in a CMake condition, getting "Unknown arguments specified"
问:
请考虑以下文件:CMakeLists.txt
cmake_minimum_required(VERSION 3.25.0 FATAL_ERROR)
project(foo)
set(my_list one two three)
if ("two" IN_LIST ${my_list})
message("two is in your list")
else()
message("two is NOT in your list")
endif()
当我运行它时(即使用此文件进行 cmake-configuring 时),我得到:
CMake Error at CMakeLists.txt:4 (if):
if given arguments:
"two" "IN_LIST" "one" "two" "three"
Unknown arguments specified
我的脚本有什么问题?我以为这就是IN_LIST应该如何工作......
答:
1赞
Tsyvarev
3/25/2023
#1
condition 的正确参数是变量的名称,其中包含一个列表。不是列表的内容。IN_LIST
正确:
set(my_list one two three)
if ("two" IN_LIST my_list)
message("two is in your list")
else()
message("two is NOT in your list")
endif()
评论
0赞
einpoklum
3/25/2023
在你通过玩弄剧本来回答之前,我已经想通了。无论如何,谢谢。但是 - 我想知道为什么更多参数的情况,第一个参数不是变量名称,没有被解释为要搜索的列表。
0赞
Tsyvarev
3/25/2023
嗯,不确定我是否理解你的问题。该条件完全由 3 个元素组成。因此,对于这种情况,有 5 个元素永远不会正确。或者你会问,为什么他们设计这种条件只接受变量名称,而不是列表的内容?IN_LIST
0赞
einpoklum
3/26/2023
我的问题确实是关于设计的——为什么 CMake 不接受更多参数作为“即时”列表?
0赞
Tsyvarev
3/26/2023
假设变量由用户填充,用户输入其 4 个元素:“my_list”、“AND”、“FALSE”。在这种情况下,当调用为 时,命令将看到以下参数:“my_list”、“IN_LIST”、“two”、“AND”、“FALSE”,这也对应于两个条件的组合:(“two” IN_LIST “my_list”) 和 <(result-of-IN_LIST)> AND FALSE。这绝对是开发人员所期望的。这就是为什么每个条件的每个操作数都是一个单值:这允许命令为任何操作数值生成正确的逻辑。my_list
if ("two" IN_LIST ${my_list})
if
if
if
1赞
Tsyvarev
3/26/2023
也许,CMake 可以允许“内联列表”作为 IN_LIST 命令的正确参数:.这类似于命令cmake_parse_arguments中的选项规范。if ("two" IN_LIST "one;two;three")
评论