为什么导出的接口库find_dependency (GSL) 失败

Why is find_dependency(GSL) failing for exported interface library?

本文关键字:dependency GSL 失败 find 接口 为什么      更新时间:2023-10-16

我写了一些仅标题库,例如:

cmake_minimum_required(VERSION 3.10)
add_library(testLib INTERFACE)
...
find_package(GSL REQUIRED)
find_package(Boost 1.32 REQUIRED)
target_link_libraries(testLib INTERFACE Boost::boost GSL::gsl GSL::gslcblas)

并在testLibConfig.cmake文件中写道:

include(CMakeFindDependencyMacro)
find_dependency(GSL)
find_dependency(Boost 1.32)
include("${CMAKE_CURRENT_LIST_DIR}/testLibTargets.cmake")

但是当我尝试像这样使用它时:

find_package(testLib)

我收到错误:

将"importTest"链接到目标"GSL::gsl",但目标不是 发现。 也许导入的目标缺少 find_package(( 调用,或者 缺少别名目标?

以及 GSLCBLAS 组件的类似错误消息。但是,通过将库包含为

find_package(testLib)
find_package(GSL)

错误消息消失。请注意,客户端不需要有关所用库提升的类似知识。我做错了什么吗?

问题似乎是较早的find_package调用。通过删除find_package调用(仅使用 find_dependency 转发依赖项(,接口库的客户端不需要额外的find_package调用。我想问题是find_dependency确实是一个宏。通过首先调用find_package变量设置为已找到,并且客户端不会唤起第二个find_package调用...?