CMP0079

3.13 版本新增。

target_link_libraries() 允许与其它目录中的目标一起使用。

在 CMake 3.13 之前,target_link_libraries() 命令不允许将非当前调用目录中创建的目标作为其第一个参数,用于更新目标自身的 LINK_LIBRARIES。在仅更新 INTERFACE_LINK_LIBRARIES 的调用中,它意外地接受了来自其它目录的目标,但只会像在原始目录中进行调用一样向该属性添加条目。因此,以这种方式指定的链接接口库始终由生成器在原始目标的范围内进行查找,而不是在调用 target_link_libraries() 的范围内查找。

CMake 3.13 现在允许在任何目录中调用 target_link_libraries() 命令,以将链接依赖项和链接接口库添加到在其它目录中创建的目标中。这些条目被添加到 LINK_LIBRARIESINTERFACE_LINK_LIBRARIES 中,并使用特殊的(内部)后缀来告知生成器在调用范围中查找名称,而不是在创建目标的范围中查找。

此策略为那些已经对其它目录中的目标使用 INTERFACE 关键字调用 target_link_libraries(),以添加在目标所在目录中进行查找的 INTERFACE_LINK_LIBRARIES 条目的项目提供了兼容性。在此类情况下,应更新这些项目以了解新的作用域规则。

此策略的 OLD 行为是禁止在其它目录中调用 target_link_libraries() 来指定目标(仅使用 INTERFACE 关键字的情况除外,该情况此前是意外允许的)。此策略的 NEW 行为是允许所有此类调用,但使用新的作用域规则。

此策略在 CMake 版本 3.13 中引入。它可以由 cmake_policy()cmake_minimum_required() 设置。如果未设置,CMake 将发出警告并使用 OLD 行为。

注意

策略的 OLD 行为根据定义已被弃用,并可能在未来版本的 CMake 中被移除。