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