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 行为。

注意

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