我可以让使用 conan 的库的用户可选择使用 conan 吗?

Can I make conan usage optional to users of my library that uses conan?

用柯南开发一个库,似乎是在强迫库的用户也使用柯南。有没有一种(标准)方法可以用 protobuf 替换 Targets.cmake 中的 CONAN_PKG::protobuf 引用?

上下文

我正在使用cmake构建一个使用protobuf的静态C++库,使用conan来处理protobuf依赖,即

target_link_libraries(mylib
    PUBLIC
        CONAN_PKG::protobuf
    )

当我在本地安装这个库时,即 ninja install 创建的 MylibTargets.cmake 包含对 CONAN_PKG::protobuf

的引用
set_target_properties(Mylib::Mylib PROPERTIES
  INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include/mylib;${_IMPORT_PREFIX}/include"
  INTERFACE_LINK_LIBRARIES "CONAN_PKG::protobuf"

这会强制我的图书馆的用户使用 conan 来解决 CONAN_PKG::protobuf 依赖关系。 (我希望库的用户能够使用 protobuf 头文件)。

我正在使用

install(EXPORT MylibTargets
    FILE MylibTargets.cmake
    NAMESPACE Mylib::
    DESTINATION lib/cmake/mylib
    )

生成MylibTargest.cmake

是的,所有现代 CMake 集成都可以实现某种程度的透明集成。第一次尝试是 cmake_find_packagecmake_find_package_multi,但最现代的尝试是:

  • CMakeDeps:see docs 生成 xxx-config.cmake 脚本,因此消费者可以正常执行 find_package(protobuf ...)
  • CMakeToolchain:see docs 生成一个 conan_toolchain.cmake 以帮助将 Conan 设置映射到 CMake 语法(并且可以与 -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake
  • 一起使用

通过这种整合,CMakeLists.txt 可以完全不了解柯南。这个集成将成为柯南2.0中的标准集成。