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