用柯南来开发一个图书馆,似乎是在强迫图书馆的用户也使用柯南。是否有一种(标准的)方法可以替换目标中的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_package
和cmake_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的标准集成。