使用 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_package
和 cmake_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/