CMP0125

3.21 版本中新增。

这些命令 find_file()find_path()find_library()find_program() 将自己的结果缓存到其第一个参数指定的变量中。在 CMake 3.21 之前,如果在调用之前已经存在一个同名缓存变量,但缓存变量没有类型,那么任何同名的非缓存变量都将被丢弃,总是使用缓存变量(请参阅 CMP0126 了解不同但相似的行为)。这与一个非缓存变量应优先于同名缓存变量的惯例相矛盾。如果用户在命令行上设置缓存变量但不指定类型,例如 cmake -DMYVAR=blah ... 而不是 cmake -DMYVAR:FILEPATH=blah,则可能会出现这种情况。

与此相关的是,如果一个同名的缓存变量已经存在并且它确实有类型,那么不同的 find_...() 命令将原样返回该值。特别是,如果它包含相对路径,则在这种情况下不会将其转换为绝对路径。

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

  • 如果在调用 find_...() 命令时存在一个同名的非缓存变量,则其值将被使用,而不管是否已经存在同名的缓存变量。如果没有这样的缓存变量,则在这种情况下不会创建缓存变量。如果同名的缓存变量已经存在,那么缓存将被更新为与非缓存变量匹配。

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

此策略在 CMake 3.21 版中引入。它可以通过 cmake_policy()cmake_minimum_required() 设置。如果未设置,CMake 将发出警告,并使用 OLD 行为。

注意

一项策略的 OLD 行为 定义上已弃用,并且可能在未来的 CMake 版本中移除。