柯南和 Cmake:目标已经存在

Posted

技术标签:

【中文标题】柯南和 Cmake:目标已经存在【英文标题】:Conan and Cmake: target already exists 【发布时间】:2021-01-15 10:40:02 【问题描述】:

我将 conan_cmake_run() 宏用于 CMake。当我添加两个具有相同外部 dep 的库时。它会导致错误消息。

例子:

conan_cmake_run(REQUIRES boost/1.74.0 BASIC_SETUP CMAKE_TARGETS)
conan_cmake_run(REQUIRES hdf5/1.10.6  BASIC_SETUP CMAKE_TARGETS)

Boost 和 HDF5 会将 zlib 添加为外部 dep。因此,这会导致在 CMake 配置期间出现以下错误消息。

CMake Error at build/conanbuildinfo_multi.cmake:152 (add_library):
  add_library cannot create imported target "CONAN_PKG::zlib" because another
  target with the same name already exists.
Call Stack (most recent call first):
  build/conanbuildinfo_multi.cmake:286 (conan_define_targets)
  cmake/modules/conan.cmake:515 (conan_basic_setup)
  CMakeLists.txt:104 (conan_cmake_run)

有没有办法明确不为 boost/1.74.0 或 hdf5/1.10.6 添加“CONAN_PKG::zlib”?

提前非常感谢!

最好的,

【问题讨论】:

【参考方案1】:

重要的是不要运行两次cmake_conan_run,而只运行一次带有多个参数,例如:

conan_cmake_run(REQUIRES boost/1.74.0 hdf5/1.10.6 BASIC_SETUP CMAKE_TARGETS)

单独运行,第二次将覆盖前一次的结果。此外,在安装过程中可能会被忽视的冲突(如 boost/1.74 取决于 zlib/1.2.8 和 hdf5/1.10.6 取决于 zlib/1.2.11)。在安装项目的依赖时,应该做一个conan install,或者一个conan_cmake_run()

【讨论】:

以上是关于柯南和 Cmake:目标已经存在的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在柯南包管理器中使用 github 分支?

添加不存在的目标时强制 CMake target_link_libraries 失败

Cmake:使用柯南 pybind11 包

CMake:隐藏子目标的-WShadow全局编译标志

Cmakelists 与柯南

柯南包管理器和 CMakePresets.json?可能吗?