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