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