CMP0174

3.31 版本中新增。

cmake_parse_arguments(PARSE_ARGV)在单值关键字后为一个空字符串定义一个变量。

使用 PARSE_ARGV 形式 cmake_parse_arguments() 命令的主要原因之一是更加健壮地处理与空值相关的边界情况。非 PARSE_ARGV 形式不保留空参数,但 PARSE_ARGV 形式保留空参数。对于给出的每个单值关键字,如果关键字存在,则应定义一个变量,即使后面跟着一个空字符串。

在 CMake 3.31 之前,如果单值关键字后面的给定值为空字符串,则不会定义变量。这意味着代码无法检测到关键字未给定和给定但值为空之间的差异,除了遍历所有参数并检查关键字是否存在之外。

对于此策略的 OLD 行为,cmake_parse_arguments(PARSE_ARGV) 未为单值关键字后跟空字符串或根本不后跟任何值而定义某个变量。

对于 NEW 行为,cmake_parse_arguments(PARSE_ARGV) 始终为参数中给定的每个关键字定义一个变量,即使是单值关键字,其值为一个空字符串或根本没有值。使用 NEW 行为,代码可以使用仅仅 if(DEFINED <prefix>_<keyword>) 健壮地检查是否给出了单值关键字。

此策略在 CMake 3.31 版本中引入。它可能由 cmake_policy()cmake_minimum_required() 设置。如果未设置,则 CMake 会发出警告,并使用 OLD 行为。

注意

策略的 行为在 定义中已 弃用,并且可能在未来版本的 CMake 中移除。