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 条目以在目标目录中查找。在这种情况下,应更新此类项目以了解新的范围界定规则。

此策略的“旧”行为是禁止 target_link_libraries() 从另一个目录调用命名目标,除非在以前意外允许的情况下仅使用 INTERFACE 关键字。此策略的“新”行为是允许所有此类调用但使用新的范围规则。

此策略是在 CMake 版本 3.13 中引入的。 CMake 版本 |发布|当未设置策略并使用“旧”行为时发出警告。使用 cmake_policy() 命令将其显式设置为 OLDNEW

备注

策略的“旧”行为是 :manual:根据定义 <cmake-policies(7)> 已弃用,并且可能会在未来版本的 CMake 中删除。