CMP0125

在 3.21 版本加入.

find_file()find_path()find_library()find_program() 命令将它们的结果缓存在第一个参数指定的变量中。在 CMake 3.21 之前,如果该名称的缓存变量在调用之前已经存在但缓存变量没有类型,则任何同名的非缓存变量都将被丢弃并且始终使用缓存变量(另请参阅:policy: CMP0126 用于不同但相似的行为)。这与非缓存变量应优先于同名缓存变量的约定相矛盾。如果用户在命令行上设置缓存变量而不指定类型,例如“cmake -DMYVAR=blah ...”而不是“cmake -DMYVAR:FILEPATH=blah”,就会出现这种情况。

与上述相关,如果指定名称的缓存变量已经存在并且它*确实*具有类型,则各种 find_...() 命令将返回该值不变。特别是,如果它包含相对路径,则在这种情况下不会转换为绝对路径。

当策略“CMP0125”设置为“旧”或未设置时,行为如上所述。当它设置为 NEW 时,行为如下:

  • 如果调用``find_...()`` 命令时存在指定名称的非缓存变量,则无论是否存在同名缓存变量,都将使用其值。如果之前不存在这样的缓存变量,则在这种情况下不会创建缓存变量。如果指定名称的缓存变量已经存在,则缓存将被更新以匹配非缓存变量。

  • 各种 find...() 命令将始终在结果变量中提供绝对路径,除非缓存或非缓存变量提供的相对路径无法解析为现有路径。

此策略是在 CMake 版本 3.21 中引入的。使用 cmake_policy() 命令将其显式设置为 OLDNEW。与许多政策不同,CMake 版本 |release|当政策未设置时 发出警告,只是使用“旧”行为。

备注

策略的“旧”行为是 :manual:根据定义 <cmake-policies(7)> 已弃用,并且可能会在未来版本的 CMake 中删除。