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,并使用一个特殊的(内部)后缀来告诉生成器在调用范围内而不是创建目标的范围内查找名称。

此策略提供了与已经使用 target_link_libraries() 并在其他目录中的目标上使用 INTERFACE 关键字来添加要在目标目录中查找的 INTERFACE_LINK_LIBRARIES 条目的项目兼容。在这种情况下,应更新此类项目以了解新的作用域规则。

此策略的 OLD 行为是禁止 target_link_libraries() 调用命名来自另一个目录的目标,除了以前意外允许的仅使用 INTERFACE 关键字的情况。此策略的 NEW 行为是允许所有此类调用,但使用新的作用域规则。

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

注意

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