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 行为。

注意