从库中传播传递目标的最佳实践?

时间:2018-01-24 21:09:01

标签: cmake

我正在使用现代cmake(即具有适当的目标和属性)编写一个库(我们称之为 mylib )。直到我遇到第3方依赖(让我们称之为 libfoo )并没有在其FooConfig.cmake中定义导入的目标时,这一切都很好。

为此,我决定编写自己的自定义FindFoo.cmake模块,我自己定义依赖项的目标Foo::Foo。这适用于构建 mylib ,但在尝试链接可执行文件时(安装后)失败。

以下是MyLibConfig.cmake的简化版:

include(CMakeFindDependencyMacro)
find_dependency(Foo 1.0 REQUIRED)
include(${CMAKE_CURRENT_LIST_DIR}/MyLibTargets.cmake)

现在,当我尝试从可执行文件链接 mylib 时(让我们称之为 myexec ),我收到以下错误:

Target "myexec" links to target "Foo::Foo" but the target was
not found.  Perhaps a find_package() call is missing for an IMPORTED
target, or an ALIAS target is missing?

我理解为什么会发生这种情况:目标Foo::Foo是在我的自定义FindFoo.cmake模块中定义的(它是 mylib 的公共依赖关系)。但是,加载MyLibConfig.cmake时, myexec 无法使用此模块。

现在的问题是,这个问题的最佳解决方案是什么?我看到的一个想法是使用 mylib 安装FindFoo.cmake并在运行CMAKE_MODULE_PATH时将其添加到MyLibConfig.cmake,总线这对我来说似乎不对。如何为用户提供可传递的目标?

0 个答案:

没有答案