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