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

  • 本文关键字:conan 我可以 用户 c++ cmake conan
  • 更新时间 :
  • 英文 :


用柯南来开发一个图书馆,似乎是在强迫图书馆的用户也使用柯南。是否有一种(标准的)方法可以替换目标中的CONAN_PKG::protobuf引用?仅仅是纯纯的吗?

<

上下文/h2>

我正在使用cmake构建一个静态c++库使用protobuf,使用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
)

生成mylibtarget .cmake

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

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

通过这种集成,可以使CMakeLists.txt完全不知道柯南。这个集成将成为柯南2.0的标准集成。

相关内容

最新更新