CMP0174

在版本 3.31 中添加。

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

使用 cmake_parse_arguments() 命令的 PARSE_ARGV 形式的主要原因之一是更健壮地处理与空值相关的边界情况。非 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 行为。

注意

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