什么是 CMake 中的 INTERFACE IMPORTED 库及其用途?

What is an INTERFACE IMPORTED library in CMake and what are its uses?

到目前为止,我已经看到用于描述 header-only 库的 INTERFACE 库类型,因为它不编译源代码,也不生成库工件。 IMPORTED 库类型我见得比较少,但据我所知,它用于描述已经 on-disk.

的预编译库

我最近看到一些带有 IMPORTED INTERFACE 库类型的代码,并且对为什么要使用它感到困惑。该类型有哪些特点,该类型有哪些典型的use-cases?

它指的是一个 header-only 库,其来源您无法控制或在另一个构建树/系统中找到。最常在查找模块或 CMake 包配置模块中创建。

与其他导入的目标一样,但与 non-imported 目标不同的是,它不必(实际上 不能install()-ed 如果它出现在 install()ed 目标的 INTERFACE_LINK_LIBRARIES 属性 中;相反,生成的包将需要 find_dependency 包。