在 CMake 条件下使用 IN_LIST 时,获取“指定的未知参数”

When using IN_LIST in a CMake condition, getting "Unknown arguments specified"

提问人:einpoklum 提问时间:3/25/2023 更新时间:3/25/2023 访问量:342

问:

请考虑以下文件: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应该如何工作......

列出 CMake 比较 运算符 成员资格

评论


答:

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_listif ("two" IN_LIST ${my_list})ififif
1赞 Tsyvarev 3/26/2023
也许,CMake 可以允许“内联列表”作为 IN_LIST 命令的正确参数:.这类似于命令cmake_parse_arguments中的选项规范。if ("two" IN_LIST "one;two;three")