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_LIBRARIES 和 INTERFACE_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 版本中被移除。