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 中移除。