需要正确的 CMake "$<TARGET_NAME:" 用法以启用交叉导出集 INTERFACE_LINK_LIBRARY 依赖项

问题描述

我在导出集中有一个目标——plugins::support_macros,比如说——它有一个接口链接依赖于同一包中不同导出集中的目标(例如 {{1 }})。我知道我需要使用 libs::main_lib 来表达依赖关系,但它总是过早地被解释,我得到,“引用了以下导入的目标,但缺少:...”

尝试延迟对生成器表达式的解释会导致 $<TARGET_NAME:...> 文件中的原始和无用的 \ 字符,或者 CMake 在构建时无法识别目标。到目前为止,我最接近的尝试是将依赖关系表示为:

Targets.cmake

这以 target_link_libraries(support_macros INTERFACE $<1:$<TARGET_NAME:libs::main_lib>> ...) 结尾:

Targets.cmake

并且后续检查失败:

...INTERFACE_LINK_LIBRARIES "\$<1:libs::main_lib>;..."

在这里不知所措:CMake 的生成器表达式页面unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) foreach(_target "lib::main_lib" ) if(NOT TARGET "${_target}" ) set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}") endif() endforeach() 的文档很简洁,要找到不只是从互联网上返回指向它的链接搜索词是不可能的到目前为止对我来说。

感谢任何帮助!

[PS] 我见过 CMake: dependency management in a multi-library package export,但它似乎没有解决我的问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)