• 【 解决jsoncpp被多重引入问题add_library cannot create imported target “JsonCpp::JsonCpp“】


    项目中需要使用jsoncpp来解析json文件,但是当前代码里面的依赖package也有包含jsocpp,导致jsoncpp被多次引入,造成编译错误:如下:
    CMake Error at /home/a/work/install/jsoncpp/lib/cmake/jsoncpp/jsoncpp-namespaced-targets.cmake:5 (add_library):
    add_library cannot create imported target “JsonCpp::JsonCpp” because
    another target with the same name already exists.
    Call Stack (most recent call first):
    /home/a/work/zeekros/install/jsoncpp/lib/cmake/jsoncpp/jsoncppConfig.cmake:31 (include)
    /usr/share/cmake-3.16/Modules/CMakeFindDependencyMacro.cmake:47 (find_package)
    CMakeLists.txt:62 (find_package)

    解决方案:
    修改jsoncpp仓库的jsoncpp-namespaced-targets.cmake 里面加上TARGET JsonCpp::JsonCpp检查就可以了

    if (TARGET jsoncpp_static AND NOT TARGET JsonCpp::JsonCpp)
        add_library(JsonCpp::JsonCpp INTERFACE IMPORTED)
        set_target_properties(JsonCpp::JsonCpp PROPERTIES INTERFACE_LINK_LIBRARIES "jsoncpp_static")
    elseif (TARGET jsoncpp_lib AND NOT TARGET JsonCpp::JsonCpp)
        add_library(JsonCpp::JsonCpp INTERFACE IMPORTED)
        set_target_properties(JsonCpp::JsonCpp PROPERTIES INTERFACE_LINK_LIBRARIES "jsoncpp_lib")
    endif ()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    解决方案参考
    https://github.com/open-source-parsers/jsoncpp/issues/1356

    This is happening because the jsoncpp-namespaced-targets.cmake file is not checking if the target exists. A simple change adding a check to see if JsonCPP::JsonCPP is defined should fix this problem:

    if (TARGET jsoncpp_static AND NOT TARGET JsonCpp::JsonCpp)
    add_library(JsonCpp::JsonCpp INTERFACE IMPORTED)
    set_target_properties(JsonCpp::JsonCpp PROPERTIES INTERFACE_LINK_LIBRARIES “jsoncpp_static”)
    elseif (TARGET jsoncpp_lib AND NOT TARGET JsonCpp::JsonCpp)
    add_library(JsonCpp::JsonCpp INTERFACE IMPORTED)
    set_target_properties(JsonCpp::JsonCpp PROPERTIES INTERFACE_LINK_LIBRARIES “jsoncpp_lib”)
    endif ()

  • 相关阅读:
    JS----前端不同格式的 UUID生成
    深入探索Java设计模式:责任链模式解析与实践
    【C++】C++实战项目机房预约管理系统
    树莓派无需显示屏的VNC Viewer方式的远程连接
    1331_FreeRTOS队列功能xQueueReceive的实现分析
    模型压缩-剪枝算法详解
    提升服务器性能相关
    vue watch 侦听器 监视器
    maven的私服
    API 工程化分享
  • 原文地址:https://blog.csdn.net/qq_24622489/article/details/125483474