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