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