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

标签 c++ cmake conan

使用 conan 开发库似乎迫使该库的用户也使用 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 ...)
  • CMake工具链:see docs生成 conan_toolchain.cmake 以帮助将 Conan 设置映射到 CMake 语法(并且可以与 -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake 一起使用

通过这种集成,可以使 CMakeLists.txt 完全不受 Conan 影响。这一集成将成为柯南 2.0 中的标准集成。

关于c++ - 我可以让使用 conan 的库的用户可以选择使用 conan 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69394739/

相关文章:

c++ - Eclipse CDT 调试 : Show dynamic type

c++ - 是否有任何标准功能可用于创建以容器为 mapped_type 的 map 的平面 View ?

c++ - 在网络摄像头图像中查找 ROI

c++ - CMake 在创建简单项目时无法在 Windows 中找到 SFML 目录

c++ - Gurobi 和 C++ - 如何使用 Clion 协同工作

c++ - Conan + CMake + C++ : Linking against Boost. 记录静态库失败

ubuntu-16.04 - conan已安装但未找到命令

c++ - 如何更新旧的 C 代码?

c - 我如何告诉 cmake 执行这两个步骤来使用 winpcap?

ubuntu - 柯南从容器内部失败,出现 "sudo: not found"错误